python - 我没有得到正则表达式的预期结果

标签 python regex

我在 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']

只匹配小写的 ptz 的单词:

[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)]

如果您还想匹配以 ZPt 开头的单词,您可以在 w.lower() 中检查成员资格。

关于python - 我没有得到正则表达式的预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39183538/

相关文章:

python - Jenkins 执行时间太长

java - 如何使用 ProcessBuilder 从 java 运行并行 python 脚本

java - 如何用正则表达式实现这个条件?

java - 简单的 Java 正则表达式在两者之间读取

javascript - 为什么javascript字符串匹配包含undefined

python - 从 bash 脚本运行 "python manage.py runserver"

python - Django删除 super 用户

python - pickle.load 不工作

Java:使用正则表达式计算字符串中的数字

regex - 如何在正则表达式中获得负面前瞻以接受更多单词