使用正则表达式忽略包含子字符串的单词

时间:2018-10-13 07:58:20

标签: python regex python-3.x

我是一个初学者,为此花费了很多时间。我部分能够解决它。

问题:我想忽略所有具有theThe的单词。例如。 atheist, others, The, the将被排除。但是,hottie不应包含在内,因为the不会出现在整个单词中。

我正在使用Python的re引擎。

这是我的正则表达式:

\b               - Start at word boundary
(?!              - Negative lookahead to avoid starting with the or The
   [t|T]he       - the and The
)
\w+              - Other letters are fine
(?<!             - Negative look behind
    [t|T]he      - the or The shouldn't occur before \w+
)
\b               - Word boundary

给定输入的预期输出:

Input: Atheist Others Their Hello the The bathe hottie tahaie theater

Expected Output: Hello hottie tahaie

regex101中可以看到,我可以排除除atheist之类的词以外的大多数词,即the or The出现在单词中的情况。我在SO上进行了搜索,发现了诸如How to exclude specific string using regex in Python?之类的一些线程,但是它们似乎与我要执行的操作没有直接关系。

任何帮助将不胜感激。


请注意,我只想使用正则表达式来解决此问题。我不是在寻找使用python的字符串操作的解决方案。

1 个答案:

答案 0 :(得分:3)

该方法比原始正则表达式更简单:

\b(?!\w*[t|T]he)\w+\b

我们匹配一个单词,但是请使用否定的“填充式”前瞻确保单词内没有the。您原来的方法只禁止在单词的前面或后面使用the,因为它不允许在单词边界之后/之前进行填充。

(?![tT]he)仅在当前位置匹配 ,而(?:\w*[tT]he)允许从当前位置扩展匹配,因为\w*可以用作填充符