这是我的第一个问题:我需要搜索一个单词列表,找到任何带有'Q'或'q'后面跟着'U'或'u'的单词。一个例子是伊拉克,但不是质量。
我们刚刚在课堂上介绍了正则表达式,我不确定我的正则表达式是否会执行上述操作。
我有以下正则表达式
r"Qq[^Uu]"
但我不确定是否有更好的,更Pythonic的方式来做到这一点。
感谢您的提前指导。
瓦西姆
答案 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)