Python 根据字符前后匹配字符串条件

Python 根据字符前后匹配字符串条件,python,regex,Python,Regex,Regex总是让我头疼。我试图匹配一个模式,只有当且仅当前后两个字符都不是数字时,它才会匹配。如果其中一个字符是数字,就可以了 例如,对于字符串“Zeitraum vom 1.6.-30.6.”我试图匹配虚线(-),但是模式不应匹配“12-3-2019”(虚线前后的字符都是数字) 目前我正在尝试排除,但如果两个字符都不是数字,则这似乎是匹配的 [^\d]-[^\d] 谢谢您可以使用 r'-(?<!\d-(?=\d))' r'-(?您可以使用替代选项: (?<!\d)-|-(?!\

Regex总是让我头疼。我试图匹配一个模式,只有当且仅当前后两个字符都不是数字时,它才会匹配。如果其中一个字符是数字,就可以了

例如,对于字符串“Zeitraum vom 1.6.-30.6.”我试图匹配虚线(-),但是模式不应匹配“12-3-2019”(虚线前后的字符都是数字)

目前我正在尝试排除,但如果两个字符都不是数字,则这似乎是匹配的

[^\d]-[^\d]
谢谢

您可以使用

r'-(?<!\d-(?=\d))'

r'-(?您可以使用替代选项:

(?<!\d)-|-(?!\d)
(?

这个匹配的连字符前面没有数字,后面也没有数字

太好了!!这似乎起作用了,你能解释一下为什么吗D@FabianBosler:
(?构造是负向后看,是一个零长度的断言,可以确保我们在当前位置之前没有一个数字。请看:太好了,你们太棒了。@Wiktor,会接受Totos的答案,因为他速度快,我发现他的解稍微容易一点。@FabianBosler我的答案是第一个,但你们可能适合自己。@WiktorStribiżew还在努力理解你的。为什么
3--3
匹配?有一个数字,一个连字符,后面跟一个digit@WiktorStribiżew有时,可读性优先于performance@Cid您需要阅读。该
-
必须使用连字符,以便lookback模式可以停止进一步使用,并回溯到哪里我们不希望它这样,你可以把它看作一个“锚”。