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