正则表达式只匹配奇数/偶数索引

时间:2015-06-30 20:03:40

标签: regex hex notepad++

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

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

我的示例输入如下:

324F8D8A20561205231920

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

3 个答案:

答案 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