仅匹配 odd/even 索引的正则表达式

Regex that only matches on odd/even indices

是否有正则表达式仅在字符串以奇数或偶数索引开始时匹配它?我的用例是一个十六进制字符串,我想在其中替换某些 "bytes".

现在,当尝试匹配 20 (space) 时,“7209”中的 20 也会被匹配,即使它由字节 72 组成和 09。在这种情况下,我仅限于 Notepad++ 的正则表达式实现,因此我无法检查匹配索引,例如在 Java.

我的示例输入如下:

324F8D8A20561205231920

我设置了一个测试页面 here,正则表达式应该只匹配 20 的第一次和最后一次出现,因为中间那个从奇数索引开始。

这似乎适用于晚上:

rx <- "^(.{2})*(20)"

strings <- c("7209","2079","9720")

grepl(rx,strings) # [1] FALSE  TRUE  TRUE

不确定 Notepad++ 将什么用于正则表达式引擎 - 我已经有一段时间没有使用它了。这适用于 javascript...

/^(?:..)*?(20)/

...

/^     # start regex
(?:    # non capturing group
..     # any character (two times)
)*?    # close group, and repeat zero or more times, un-greedily
(20)   # capture `20` in group
/      # end regex

您可以使用以下正则表达式匹配十六进制字符串中偶数位置的 20

20(?=(?:[\da-fA-F]{2})*$)

demo

我假设在这种情况下字符串没有空格。

如果值(或任何其他符号)之间有空格,这可能是一个替代方法(使用 XX-like 替换字符串):

((?:.{2})*?)20

another demo