Python 3.x 如何从字符串中提取准确的单词,同时减少误报发现
我想从字符串中提取确切的单词。我的代码将搜索项视为子字符串,从而导致错误发现。代码如下:Python 3.x 如何从字符串中提取准确的单词,同时减少误报发现,python-3.x,regex,Python 3.x,Regex,我想从字符串中提取确切的单词。我的代码将搜索项视为子字符串,从而导致错误发现。代码如下: import re text="Hello I am not react-dom" item_search=['react', 'react-dom'] Found_item=[] for i in range(0, len(item_search)): Q=re.findall(r'\b%s\b'%item_search[i], text, flags=re.IGNORECASE | re.M
import re
text="Hello I am not react-dom"
item_search=['react', 'react-dom']
Found_item=[]
for i in range(0, len(item_search)):
Q=re.findall(r'\b%s\b'%item_search[i], text, flags=re.IGNORECASE | re.MULTILINE | re.UNICODE)
Found_item.append(Q)
print(Found_item)
输出为:[['react'],['react-dom']
。因此,在结果中,我不希望看到react
作为项目
预期的输出是:
['','react-dom']
\b
用于指示类型之间的边界。例如,在单词和标点符号之间等。因此,\b
将出现在react的t
和-
之间。因此,这里因为我们需要整个单词,我们只需要使用lookback和lookahead来确保两者之间没有空格(这与说两者之间有空格不同)。因此,您可以使用:
re.findall(rf"(?<!\S)({'|'.join(item_search)})(?!\S)", text)
['react-dom']
re.findall(rf)(?\b
用于指示类型之间的边界。例如单词和标点符号之间等。因此\b
将出现在react的t
和-
之间。因此,由于我们需要整个单词,因此这里只需使用前向和后向,以确保两者之间没有空格(这与说两者之间有空格不同)。因此,您可以使用:
re.findall(rf"(?<!\S)({'|'.join(item_search)})(?!\S)", text)
['react-dom']
re.findall(rf)(?如果任何项目后面或前面紧跟标点符号,例如“Hello I am not react dom”,则您的解决方案不起作用。
@DYZ如果要包含该内容,则正则表达式将改为(?我不确定它对OP有多重要,但它仍然不适用于“Hello I am not.react dom”
@DYZ它之所以有效,是因为它返回一个空列表。它当然应该返回空列表,因为列表中没有not.react dom
。我们只有react dom
和react
。这就像说它应该在not:react dom
中捕获react dom
。但这是不正确的,因为它将是一个ode>子字符串
。我们不需要子字符串。您好,亲爱的回答有一点我注意到,如果文本是您好,我不是/react dom
,则普通人找不到react dom
。请帮助修改它。如果任何项目后面或前面紧跟标点,例如“您好,我不是react-dom。”
@DYZ如果您将其包括在内,则正则表达式将更改为(?我不确定它对OP有多重要,但它仍然不适用于“您好,我不是。react-dom"
@DYZ它之所以有效,是因为它返回一个空列表。它当然应该返回空列表,因为列表中没有not.react dom
。我们只有react dom
和react
。这就像说它应该在not:react dom
中捕获react dom
。但这是不正确的,因为它将是一个ode>子字符串
。我们不需要子字符串。您好,亲爱的回答有一点我注意到,如果文本是您好我不是/react dom
,则普通人找不到react dom
。请帮助修改它。如果是text=“您好我不是react dime”
,您希望看到一个空列表还是[“react”]
?项目react
不应出现在最终结果中,因为它不是一个独立的词。在text=“你好,我不是react dime”
的情况下,您希望列表为空还是[“react”]
?项目react
不应出现在最终结果中,因为它不是一个独立的词。