Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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,想象一下,如果有一个单词列表,比如words=[“hello”,“boy”,“cool”]和一个用户输入的字符串string=“helloboycool” 我的问题:是否有一种方法可以使用正则表达式查找“单词”列表中与输入“字符串”的一部分匹配的所有单词 例如: list=[“123”、“你好”、“漂亮”、“红色”、“男孩”]和input=“helloniceboy”。输入字符串没有空格 使用“input”字符串作为正则表达式的搜索词,输出应该是列表形式的单词[“hello”,“nice”,“b

想象一下,如果有一个单词列表,比如
words=[“hello”,“boy”,“cool”]
和一个用户输入的字符串
string=“helloboycool”

我的问题:是否有一种方法可以使用正则表达式查找“单词”列表中与输入“字符串”的一部分匹配的所有单词

例如:
list=[“123”、“你好”、“漂亮”、“红色”、“男孩”]
input=“helloniceboy”
。输入字符串没有空格

使用“input”字符串作为正则表达式的搜索词,输出应该是列表形式的单词
[“hello”,“nice”,“boy”]

是的,我知道这可以通过简单的循环来完成。然而,我只是想解决我在办公室工作时遇到的一个问题。所以,向你们大家提出这个问题是值得的。 另外,谢谢你的回答。他们肯定是有益的见解重叠很好


我对python中的正则表达式还相当陌生。

正则表达式是用来查找字符串中的东西,而不是列表中的东西

我建议循环浏览列表,检查每个单词是否在
字符串中:

words = ["123", "hello", "nice", "red", "boy"]
string = "helloboycool"
result = []
for word in words:
    if word in string:
        result.append(word)
print(result)
您可以使用regex来实现这一点,但我不建议这样做-这更干净、更快

这是一个具有
列表理解功能的版本

words = ["123", "hello", "nice", "red", "boy"]
string = "helloboycool"
result = [word for word in words if word in string]

如果不需要查找重叠的匹配项,可以将列表转换为正则表达式,使用
匹配备选项。然后使用
re.findall()
获取所有匹配项

import re

words = ["123","hello","nice","red","boy"]
string = "helloniceboy"
regex = re.compile('|'.join(re.escape(x) for x in words))
result = re.findall(regex, string)
re.escape()


如果您确实需要查找重叠的匹配项,那么在循环中使用
If-word-in-input
的另一个答案会更好。

它必须是正则表达式吗?这样做很容易:

list=[“123”、“你好”、“红色”、“漂亮”、“快乐”、“男孩”]
input=“helloniceboy”
结果=[]
对于列表中的i:
如果我输入:
结果.追加(i)
打印(结果)

如果必须是regex,则有一个名为
re
的内置模块,您可以使用。

我认为您不需要regex来完成此任务否,使用单个正则表达式是不可能的,因为您可能会在字符串中的同一位置开始重叠匹配。最简单的解决方案是循环列表并检查它是否在输入中返回true,否则返回false..这些示例只是在现实生活中构思出来的,从字符串中的同一位置开始的重叠匹配很常见。这不是一个解决方案,也不是一个解决办法。@WiktorStribiż鉴于OP没有描述用例,不清楚是否需要重叠匹配。OPs永远不会告诉您所有细节。根据经验,我知道这对现实生活中的任何人都没有帮助。当一个人有一个动态的单词列表并且想在更大的文本中查找它们时,这是最好的方法。我不同意你的评论。我相信这会帮助每一个刚刚开始研究正则表达式的程序员。谢谢你对这个问题的见解。