I would like to replace every _ with a - on lines starting with #| label: using PCRE2 regex within my text editor.
Example:
#| label: my_chunk_label
my_function_name <- function(x)
Should become:
#| label: my-chunk-label
my_function_name <- function(x)
In contrast to .NET regex, where one could substitute (?<=^#\| label: .+)_ with - (regex101 example), PCRE2 does not support infinite lookbehind so the regex is invalid. So far, the only way I found was to repeatedly substitute ^#[^_]+\K_ with - (regex101 example) but I was curious if there is a single-pass solution.
>Solution :
If you are using pcre, you could make use of \G and \K
Then in the replacement use -
(?:^#|\h+label:\h+|\G(?!^))[^\r\n_]*\K_
The pattern matches:
(?:Non capture group for the alternatives^#|\h+label:\h+Match the pattern that should be at the start of the string, where\hmatches a horizontal whitespace character|Or\G(?!^)Assert the current position at the end of the previous match, not at the start
)Close the non capture group[^\r\n_]*Match optional characters except for newlines or_\KForget what is matched so far_Match the underscore