免责声明:我知道可以使用“in”和“not in”,但由于技术限制,我需要使用正则表达式。
我有:
a = "digital clock time fan. Segments featuring digital 24 hour oclock times. For 11+"
b = "nine times ten is ninety"
我想根据包含“时间”而不是“时钟”进行匹配,所以 a 和 b 通过正则表达式,只有 b 通过
有任何想法吗?
您可以为此使用负前瞻:
^(?!.*\bo?clock\b).*\btimes\b
解释:
^ # starting at the beginning of the string
(?! # fail if
.*\bo?clock\b # we can match 'clock' or 'oclock' anywhere in the string
) # end if
.*\btimes\b # match 'times' anywhere in the string
is 用于单词边界,因此\b
您仍然可以匹配类似的字符串,'clocked times'
但对于类似 . 的字符串会失败'timeshare'
。\b
如果您不想要这种行为,您可以删除正则表达式中的所有内容。
例子:
>>> re.match(r'^(?!.*\bo?clock\b).*\btimes\b', a)
>>> re.match(r'^(?!.*\bo?clock\b).*\btimes\b', b)
<_sre.SRE_Match object at 0x7fc1f96cc718>