提问人:Recursing 提问时间:1/30/2020 最后编辑:Recursing 更新时间:1/30/2020 访问量:252
如果不在数字之间匹配字符,则使用正则表达式
Regex to match character if not between digits
问:
我需要匹配一个字符来拆分一个大字符串,比方说,但如果它在两位数之间,则不行-
在它应该匹配a-b
-
在它应该匹配a-4
-
在它应该匹配3-a
-
在它应该不匹配3-4
我尝试过消极的前瞻和后视,但我只能想出这个(?<=\D)-(?=\D)|(?<=\d)-(?=\D)|(?<=\D)-(?=\d)
有没有更简单的方法来指定此模式?
编辑:使用我认为我可以使用的正则表达式条件(?(?<=\D)-|-(?=\D))
答:
2赞
Zaelin Goodman
1/30/2020
#1
以下内容适用于此方案。确保你选择的正则表达式风格有条件,否则这将不起作用:
-(?(?=\d)(?<=\D-))
- // match a dash
(? // If
(?=\d) // the next character is a digit
(?<= // then start a lookbehind (assert preceding characters are)
\D- // a non-digit then the dash we matched
) // end lookbehind
) // end conditional
没有任何东西作为替换,因为破折号是唯一捕获的字符。
评论
0赞
Recursing
1/30/2020
我不知道条件,谢谢!我想我只需要,因为我明确需要只匹配字符,而不是周围的数字(?(?<=\D)-|-(?=\D))
1赞
Zaelin Goodman
1/30/2020
为此,我添加了一个更快、更简单的正则表达式的编辑。它只会匹配-
0赞
Recursing
1/30/2020
更简单的版本正是我想要的,再次感谢!也许它应该取代答案的其余部分
0赞
Zaelin Goodman
1/30/2020
将答案更新为只有新的答案,现在您已经确认这是您要找的!很高兴我能帮上忙!
1赞
The fourth bird
1/30/2020
#2
另一种选择是,当左边不是数字时,使用交替来匹配 a,或者在右边不是数字时匹配 a:-
-
(?<!\d)-|-(?!\d)
(?<!\d)-
否定向后看,断言左边的不是数字并匹配 -|
或-(?!\d)
使用否定前瞻匹配并断言右边的内容不是数字-
评论