正则表达式查找不包含特定ch的字符串

2024-10-02 22:25:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到一种方法来编写正则表达式,它匹配字符串中的任何5位数字,除了后面跟斜杠的数字。你知道吗

我搞不懂为什么这不管用:

r"\D(\d{%d})[^/]\D" % 5

示例

'dsadasd894665' -> NO MATCH
'dsadsa78954,4' -> 78954 
'dsda78954/sdd' -> NO MATCH

你知道吗?你知道吗


Tags: 方法no字符串示例match数字斜杠sdd
3条回答

你可以试试下面的正则表达式

(?<!\d)\d{5}(?=[^\d/]|$)

DEMO

说明:

  • (?<!\d)匹配项前面不会有数字。你知道吗
  • \d{5}正好是5位数字。你知道吗
  • (?=[^\d/]|$)后面必须跟一个非数字或/或行尾锚点。你知道吗

代码:

>>> import re
>>> s1 = "dsadasd894665"
>>> s2 = "dsadsa78954,4"
>>> s3 = "dsda78954/sdd"
>>> re.search(r'(?<!\d)\d{5}(?=[^\d/]|$)', s1)
>>> re.search(r'(?<!\d)\d{5}(?=[^\d/]|$)', s2)
<_sre.SRE_Match object at 0x7f0835855370>
>>> re.search(r'(?<!\d)\d{5}(?=[^\d/]|$)', s3)
(?<!\d)(\d{5})(?!\/|\d)

试试看这个。这个很好。看到了吗演示。你的正则表达式不以0宽度开始或结束断言。所以呢它实际上需要1个字符在前面,2个字符在前面。你知道吗

http://regex101.com/r/yA5iD9/16

正则表达式不起作用的原因是由于\D的原因。我不知道为什么要把它们放进去。另一个问题是[^/]与字符串的结尾不匹配,因此请改用?!。你知道吗

以下工作:

r"(\d{%d})(?!\/)" % 5

相关问题 更多 >