2

免责声明:我知道可以使用“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 通过

有任何想法吗?

4

1 回答 1

7

您可以为此使用负前瞻:

^(?!.*\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>
于 2012-04-30T23:05:51.083 回答