匹配正则表达式模式并带有消极的外观

时间:2019-09-27 15:05:28

标签: regex python-regex

我正尝试在python中编写一个正则表达式,以检测8 cc和2.8 mm之类的模式,并避免使用日期为12/26/2018 cc之类的模式

我为此模式尝试的正则表达式为:。* \ d {1,}(?!/)(\ s)(cc | mm | cm)

只要不以/

开头,就应该找到8 cc这样的模式

此正则表达式正在查找所有模式,并且没有回避日期。这个正则表达式有什么问题?

1 个答案:

答案 0 :(得分:1)

您可以使用

(?<!\d)(?<!\d/)\d+(?:\.\d+)?\s*(?:c[cm]|mm)\b

请参见regex demo

详细信息

  • (?<!\d)-不允许在左边立即输入数字
  • (?<!\d/)-禁止输入数字,并且/紧接在左侧
  • \d+-1个以上数字
  • (?:\.\d+)?-.和1个以上的数字出现1或0次
  • \s*-超过0个空格
  • (?:c[cm]|mm)\b-cccmmm作为整个单词。

Python demo

import re
rx = re.compile(r"(?<!\d)(?<!\d/)\d+(?:\.\d+)?\s*(?:c[cm]|mm)\b")
s = "I'm trying to write a regular expression in python that detects patterns like 8 cc and 2.8 mm  and avoids patterns with date like 12/26/2018 cc"
print( rx.findall(s) ) # => ['8 cc', '2.8 mm']