只有当字符串以奇数或偶数索引开始时,是否存在匹配字符串的正则表达式?我的用例是一个十六进制字符串,我想在其中替换某些"字节"。
现在,在尝试匹配20
(空格)时,20
在" 7209"即使它由字节72
和09
组成,也会匹配。在这种情况下,我仅限于 Notepad ++ 的正则表达式实现,因此我无法检查匹配索引,例如在Java。
我的示例输入如下:
324F8D8A20561205231920
我设置了一个测试页面here,正则表达式应该只匹配20
的第一个和最后一个出现,因为中间的那个以奇数索引开始。
答案 0 :(得分:4)
您可以使用以下正则表达式在十六进制字符串内的偶数位置匹配20
:
20(?=(?:[\da-fA-F]{2})*$)
请参阅demo
我认为在这种情况下字符串没有空格。
如果值(或任何其他符号)之间有空格,这可能是另一种选择(使用$1XX
- 就像替换字符串一样):
((?:.{2})*?)20
请参阅another demo
答案 1 :(得分:1)
这似乎适用于均衡:
rx <- "^(.{2})*(20)"
strings <- c("7209","2079","9720")
grepl(rx,strings) # [1] FALSE TRUE TRUE
答案 2 :(得分:1)
不确定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