我正尝试在python中编写一个正则表达式,以检测8 cc和2.8 mm之类的模式,并避免使用日期为12/26/2018 cc之类的模式
我为此模式尝试的正则表达式为:。* \ d {1,}(?!/)(\ s)(cc | mm | cm)
只要不以/
开头,就应该找到8 cc这样的模式此正则表达式正在查找所有模式,并且没有回避日期。这个正则表达式有什么问题?
答案 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
-cc
,cm
或mm
作为整个单词。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']