正则表达式找到Q后跟一个U.

时间:2014-11-13 04:30:34

标签: python regex

这是我的第一个问题:我需要搜索一个单词列表,找到任何带有'Q'或'q'后面跟着'U'或'u'的单词。一个例子是伊拉克,但不是质量。

我们刚刚在课堂上介绍了正则表达式,我不确定我的正则表达式是否会执行上述操作。

我有以下正则表达式

r"Qq[^Uu]" 

但我不确定是否有更好的,更Pythonic的方式来做到这一点。

感谢您的提前指导。

瓦西姆

3 个答案:

答案 0 :(得分:3)

您可以使用re.IGNORECASE标志

来简化正则表达式
>> pat=re.compile(r"q([^u]|$)",re.IGNORECASE )
>>> pat.search('Iraq')
<_sre.SRE_Match object at 0xb7e7c9e0>
>>> pat.search('Quantum')
>>>

注意

([^u]|$)轮换$确保q后面跟u以外的任何内容,或者它可以是一个结束$

修改

负面展望可以进一步降低正则表达式

>>> pat=re.compile(r"q(?!u)",re.IGNORECASE )
>>> pat.search('Iraq')
<_sre.SRE_Match object at 0xb7f62de8>
>>> pat.search('Quantum')
>>>

感谢nhahtdh的建议

  • (?!u)负面展望未来。断言q
  • 后面没有u

您还可以将标志直接添加到正则表达式

pat=re.compile(r"(?i)q(?!u)")

而不是为re.compile方法提供标志

感谢Avinash Raj的建议

答案 1 :(得分:1)

\b\w*q(?!u)\w*\b

(?=\b\w*q(?!u)\w*\b)\b\w+\b

使用此标志并应用ignorecase标志。

http://regex101.com/r/kP8uF5/17

import re
p = re.compile(ur'\b\w*q(?!u)\w*\b', re.IGNORECASE)
test_str = u"Iraq quality"
subst = u""

result = re.sub(p, subst, test_str)

答案 2 :(得分:0)

另一种方法是匹配坏词,匹配并捕获好词,如此

\w*qu\w*|(\w*q\w*)

Demo