[英]Match string conditional on character before and after
正则表达式总让我头疼。 我正在尝试匹配一个模式,只有在前后两个字符都不是数字的情况下才会匹配。 没关系,如果其中一个字符是数字。
即字符串“Zeitraum vom 1. 6. -30.6。” 我试图匹配短划线( - ),但是模式不应该匹配“12-3-2019”(短划线之前和之后的两个字符都是数字)。
目前我正在尝试排除,但如果两个字符都不是数字,那似乎匹配。
[^\d]-[^\d]
谢谢
你可以用
r'-(?<!\d-(?=\d))'
请参阅正则表达式演示
它匹配a -
前面没有数字和-
后面紧跟一个数字。
请注意, (?=\\d)
前瞻是必需的而不是简单的\\d
因为(?<!\\d-\\d)
之后-
在回溯时能够使匹配失败。
细节
-
- 连字符 (?<!
- 负面观察的开始:如果在当前位置的左侧立即出现,则失败
\\d
- 一个数字 -
- 连字符 (?=\\d)
- 后跟\\d
)
- 看后面的结束 您可以使用替换:
(?<!\d)-|-(?!\d)
这匹配的连字符前面没有数字或后面没有数字
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.