我在 text6 中寻找包含 z 或字符序列 pt 或以 ize 结尾的单词
我写了以下内容,但其中包含许多不符合上述条件的词,例如 appease、dance、offensive、executive...。为什么会这样?
L2=[w for w in text6 if re.search(r".*[z]|.*[p][t]|[ize]$",w)
基于上一个练习的另一个问题:我需要添加一个新的替代条件,即单词以 1 开头并且只有 1 个大写字母。
我写了
L2=[w for w in text6 if re.search(r"[A-Z]{1}|.*[z]|.*[p][t]|[ize]$",w)
它还包括大写单词(即大写字母中的所有字符)
有人能帮忙解答这两个问题吗?
提前致谢
毛罗
最佳答案
我建议在这里使用非正则表达式的方法,因为正则表达式似乎比这个用例要求的更复杂。
首先,您可以摆脱“ends in ize
”约束,因为它属于任何包含 z
的单词。
text6 = [
'appease', 'dance', 'offensive', 'executive',
'inept', 'zoo', 'Inept', 'Zoo', 'INept', 'ZOo']
只匹配小写的 pt
或 z
的单词:
[w for w in text6 if 'pt' in w or 'z' in w] # ['inept', 'zoo', 'Inept', 'INept']
对于匹配上述情况以及仅大写单词:
[w for w in text6 if w.istitle() and ('pt' in w or 'z' in w)] # ['Inept']
当然,写一个函数把这个逻辑抽象出来可能会更好:
def meets_criteria(word):
return word.istitle() and ('pt' in word or 'z' in word)
[w for w in text6 if meets_criteria(w)]
如果您还想匹配以 Z
和 Pt
开头的单词,您可以在 w.lower()
中检查成员资格。
关于python - 我没有得到正则表达式的预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39183538/