Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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 3.x 如何从字符串中提取准确的单词,同时减少误报发现_Python 3.x_Regex - Fatal编程技术网

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
不应出现在最终结果中,因为它不是一个独立的词。