如果所有模式在Python中以任意顺序存在于给定字符串中,则返回true
我想知道给定集合中的所有模式是否都存在于字符串中。这些模式本身可能是一个正则表达式 例如,如果输入字符串为:如果所有模式在Python中以任意顺序存在于给定字符串中,则返回true,python,regex,pattern-matching,string-matching,Python,Regex,Pattern Matching,String Matching,我想知道给定集合中的所有模式是否都存在于字符串中。这些模式本身可能是一个正则表达式 例如,如果输入字符串为: "Hello World" 模式集(“Hel.o Wo*”、“\*llo”、“l*d”)返回true 模式集(“Wor”、“el.”、“l*ed”)返回false 我知道我可以遍历模式集并使用re.search(),但我正在寻找一个使用re的模式搜索,它应该可以完成这项工作。比如: re.search(“pattern1&pattern2&…”,“inputString”)您可以 &g
"Hello World"
模式集(“Hel.o Wo*”、“\*llo”、“l*d”)
返回true
模式集(“Wor”、“el.”、“l*ed”)
返回false
我知道我可以遍历模式集并使用re.search(),但我正在寻找一个使用re
的模式搜索,它应该可以完成这项工作。比如:
re.search(“pattern1&pattern2&…”,“inputString”)
您可以
>>> str_in = "Hello World"
>>> pattern = ("Hel","llo","ld")
>>> all([True if p in str_in else False for p in pattern])
True
>>> pattern = ("Wor","el","led")
>>> all([True if p in str_in else False for p in pattern])
False
你可以
>>> str_in = "Hello World"
>>> pattern = ("Hel","llo","ld")
>>> all([True if p in str_in else False for p in pattern])
True
>>> pattern = ("Wor","el","led")
>>> all([True if p in str_in else False for p in pattern])
False
这是一个简单的问题,将所需的布尔表达式对齐,然后在列表上单击*all**运算符:
text = "Hello World"
pattern = ("Hel","llo","ld")
all([str in text for str in pattern])
该列表的计算结果为True和False值all对整个集合执行逻辑和;或版本是任意运算符。这是一个简单的问题,只需将所需的布尔表达式排列起来,然后在列表上单击*all**运算符:
text = "Hello World"
pattern = ("Hel","llo","ld")
all([str in text for str in pattern])
该列表的计算结果为True和False值all对整个集合执行逻辑和;或版本是任何运算符。作为其他答案的替代,递归解决方案如下所示:
def search(string, patterns):
found = len(re.findall(patterns[0], string)) > 0
if len(patterns) == 1:
return found
return found and search(string, patterns[1::])
作为其他答案的替代方案,递归解决方案如下所示:
def search(string, patterns):
found = len(re.findall(patterns[0], string)) > 0
if len(patterns) == 1:
return found
return found and search(string, patterns[1::])
您需要在开始时使用锚定:
if re.search(r"^(?=.*pattern1)(?=.*pattern2)(?=.*patternN)", inputString):
print("yeah!")
实际上,无论模式在字符串中的位置如何,都需要存在所有模式
模式匹配:
-字符串的开头^
-pattern1在除换行符*以外的任何0+字符之后(如果未使用(?=.*pattern1)
)re.DOTALL
-与pattern2相同(?=.*pattern2)
-与pattern3相同(?=.*pattern)
if re.search(r"^(?=.*pattern1)(?=.*pattern2)(?=.*patternN)", inputString):
print("yeah!")
实际上,无论模式在字符串中的位置如何,都需要存在所有模式
模式匹配:
-字符串的开头^
-pattern1在除换行符*以外的任何0+字符之后(如果未使用(?=.*pattern1)
)re.DOTALL
-与pattern2相同(?=.*pattern2)
-与pattern3相同(?=.*pattern)
请注意,由于lookahead是零宽度断言,所以所有的前瞻检查都在字符串的开头执行。
如果重新搜索(r“^(?=.*pattern1)(?=.*pattern2)(?=.*patternN)”,inputString):print(“耶!”)
Awesome,看起来效果不错。谢谢<代码>如果重新搜索(r“^(?=.*pattern1)(?=.*pattern2)(?=.*patternN)”,inputString):打印(“耶!”)太棒了,看起来效果不错。谢谢我真的很感激那些否决投票的人,他们解释得很好,而不是“你在这里”的答案,如果他们能留下一张便条,说明为什么他们认为这个答案没有用/没有帮助/论证不好。关键是,一个错误的答案比一个正确的答案有更多的向上投票,这让那些需要正确解决方案来检查所有模式是否以任何顺序匹配单个字符串的人感到困惑。我非常感谢那些向下投票的人,解释得很好,而不是“给你”答案可能会留下一个便条,说明为什么他们认为这个答案没有用处/没有帮助/论证不当。关键是一个错误的答案比一个正确的答案有更多的投票,这让那些需要正确解决方案来检查所有模式是否以任何顺序匹配单个字符串的人感到困惑。