我在text6中查找包含z或pt字符序列或以ize结尾的单词
我写了以下内容,但它包括许多不符合上述标准的单词,如安抚,舞蹈,进攻,执行。为什么会这样?
L2=[w for w in text6 if re.search(r".*[z]|.*[p][t]|[ize]$",w)
在上一个练习的基础上提出的另一个问题:我需要添加一个新的替代条件,即。单词以1开头,只有一个大写字母。
我写了
L2=[w for w in text6 if re.search(r"[A-Z]{1}|.*[z]|.*[p][t]|[ize]$",w)
它还包括大写字母的单词(即大写字母中的所有字符)
我该如何解决这些问题?
3条答案
按热度按时间7ivaypg91#
这里我建议使用非正则表达式的方法,因为正则表达式看起来比这个用例要求的更复杂。
首先,您可以摆脱“以
ize
结尾”的约束,因为它福尔斯任何包含z
的单词。仅匹配小写的
pt
或z
:为了匹配上述大小写以及仅大写的单词:
当然,最好写一个函数把这个逻辑抽象出来:
如果您还想匹配以
Z
和Pt
开头的单词,则可以在w.lower()
中检查成员关系。zhte4eai2#
你是在字符而不是单词上迭代,在这种情况下,你需要分割你的文本。
你也可以在没有正则表达式的情况下完成所有这些工作:
演示:
对于最后一个条件(* 单词以1开头,只有1个大写字母 *),如果你不想在单词中使用大写字母,除了第一个,你可以添加(
word[1:].islower()
)到check_word
函数:re.findall()
来查找单词。例如,下面的正则表达式将缠绕包含单词字符的单词:
gzjq41n43#
您正在寻找的是:
这将捕获所有需要的单词。注意,最后一部分不是必需的,因为任何匹配
ize$
的单词也将匹配z
。所以本质上,表达式可以归结为:第二种情况可以通过使用表达式
^[A-Z]{1}[^A-Z]
来解决。那就是这在下面使用:
或者简单地说