Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式问题:如何检查列表中的任何值是否匹配?_Python_Regex - Fatal编程技术网

Python 正则表达式问题:如何检查列表中的任何值是否匹配?

Python 正则表达式问题:如何检查列表中的任何值是否匹配?,python,regex,Python,Regex,我想创建一个RE对象,该对象与字符串至少包含列表中的一个元素时匹配 例如,如果列表中有坏词[“已审查”、“愚蠢”、“白痴”],则如果至少存在其中一个,则RE将匹配 这是我的RE:RE.compile((%s)+“%(“|”。.join(坏词)),RE.IGNORECASE) 问题是“youareanidiot”不匹配。为了使其匹配,我必须更改什么?虽然可以使用正则表达式来执行此操作,但我认为您最好不要使用正则表达式。要测试字符串s与坏单词的对比,请尝试以下操作 s = s.lower() any

我想创建一个RE对象,该对象与字符串至少包含列表中的一个元素时匹配

例如,如果列表中有
坏词[“已审查”、“愚蠢”、“白痴”]
,则如果至少存在其中一个,则RE将匹配

这是我的RE:
RE.compile((%s)+“%(“|”。.join(坏词)),RE.IGNORECASE)


问题是“youareanidiot”不匹配。为了使其匹配,我必须更改什么?

虽然可以使用正则表达式来执行此操作,但我认为您最好不要使用正则表达式。要测试字符串
s
坏单词的对比,请尝试以下操作

s = s.lower()
any(bad in s for bad in bad_words)

你的
坏单词应该都是小写。

虽然用正则表达式可以做到这一点,但我认为你最好不用正则表达式。要测试字符串
s
坏单词的对比,请尝试以下操作

s = s.lower()
any(bad in s for bad in bad_words)

你的
坏词
都应该是小写。

你在用re.match吗?尝试重新搜索。请参阅Python正则表达式文档

import re
bad_words = ["stupid", "idiot"]
regex = re.compile("|".join(re.escape(word) for word in bad_words), re.IGNORECASE)
print regex.search('youareanidiot').group()

# prints "idiot"

你在用re.match吗?尝试重新搜索。请参阅Python正则表达式文档

import re
bad_words = ["stupid", "idiot"]
regex = re.compile("|".join(re.escape(word) for word in bad_words), re.IGNORECASE)
print regex.search('youareanidiot').group()

# prints "idiot"

你的意思是包含而不是组合吗?你的意思是包含而不是组合吗?我刚刚做了一些测试-看起来CPython的编译正则表达式在搜索的字符串超过某个阈值(对我来说,大约等于500个字符)时会比“in”查找有明显的不同。另外,看起来CPython的“in”增加了更长字符串的复杂性,即使匹配在开始:)@lunixbochs:interest——尤其是最后一条语句!我所说的“更好”并不是指性能,而是指代码可读性和避免陷阱。例如,您的代码没有引用
bad_words
中的项,以便在正则表达式中使用
re.escape()
,这可能会在以后引入难以发现的错误。关于escape,有一点不错-除了与搜索的错误匹配之外,我真的没有想过修改他的正则表达式行。。。我还意识到他在比赛上花了额外的时间。没有group或+的新代码即使在短的“youareanidiot”字符串上运行也会稍微快一点!更多测试-如果匹配接近开始,编译的正则表达式看起来更快;如果接近结束,则“in”看起来更快。在这一点上,为了简单起见,我会选择您的实现
any(s中的bad.lower()表示bad中的bad_words)
:)我刚刚做了一些测试-看起来CPython的编译正则表达式将在搜索的字符串超过某个阈值(对我来说大约等于500个字符)的情况下击败“in”查找。另外,看起来CPython的“in”增加了更长字符串的复杂性,即使匹配在开始:)@lunixbochs:interest——尤其是最后一条语句!我所说的“更好”并不是指性能,而是指代码可读性和避免陷阱。例如,您的代码没有引用
bad_words
中的项,以便在正则表达式中使用
re.escape()
,这可能会在以后引入难以发现的错误。关于escape,有一点不错-除了与搜索的错误匹配之外,我真的没有想过修改他的正则表达式行。。。我还意识到他在比赛上花了额外的时间。没有group或+的新代码即使在短的“youareanidiot”字符串上运行也会稍微快一点!更多测试-如果匹配接近开始,编译的正则表达式看起来更快;如果接近结束,则“in”看起来更快。在这一点上,为了简单起见,我会选择您的实现
any(s中的bad.lower()表示bad_words中的bad)
:)