Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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,我正在为一个文档创建一个缩略语表,并使用regex查找长字符串中的所有缩略语,即单词document 我正在使用这个模式“[A-Z]{2,6}-*[0-9]*”。这样,“HCFC”和“HCFC-141”都将匹配 文件的某些部分是用大写字母写的。例如“抽象”。前面的模式是将“ABSTRA”和“CT”作为两个单独的单词返回。我只想匹配整个单词,并从列表中删除“ABSTRA”和“CT”。我该怎么做 顺便说一句,我试过\b[A-Z]{2,6}-*[0-9]*\b,但没有成功。也许我做错了 PSS Pyt

我正在为一个文档创建一个缩略语表,并使用regex查找长字符串中的所有缩略语,即单词document

我正在使用这个模式“[A-Z]{2,6}-*[0-9]*”。这样,“HCFC”和“HCFC-141”都将匹配

文件的某些部分是用大写字母写的。例如“抽象”。前面的模式是将“ABSTRA”和“CT”作为两个单独的单词返回。我只想匹配整个单词,并从列表中删除“ABSTRA”和“CT”。我该怎么做

顺便说一句,我试过\b[A-Z]{2,6}-*[0-9]*\b,但没有成功。也许我做错了

PSS Python代码:

pattern='[A-Z]{2,6}\-*[0-9]*'
缩写=re.findall(模式、文本)

有没有办法使用re库来处理这个问题?

我猜我们的问题可能只是
-
后面跟数字的可选组,或者我们希望有单词边界,那么这个表达式可能会起作用:

\b[A-Z]{2,6}(-[0-9]+)?\b


您可以使用
{2,6}
并确保使用单词边界
\b
,这样就不会有两个匹配项,一个用于
ABSTRA
,另一个用于
CT

\b[A-Z]{2,6}(?:-[0-9]+)?\b

在python中:

regex = r"\b[A-Z]{2,6}(?:-[0-9]+)?\b"
如果在本部分中,
-*[0-9]*
连字符不是可选的,您可以将其转换为可选组
(?:-[0-9]+)?

如果左侧或右侧没有任何内容,您可以使用:

(?<!\S)[A-Z]{2,6}-?[0-9]*(?!\S)
(?
请注意,
-*
将匹配0个或多个连字符,
-?
将匹配一个可选连字符

尝试使用r前缀

pattern = r'\b[A-Z]{2,6}\-*[0-9]*\b'
abbreviation = re.findall(pattern,text)

这将与摘要不匹配,并与HDFC、HDFC-141等匹配。

请尝试
\b[A-Z]{2,6}(?:-[0-9]+)?\b
您的正则表达式最多匹配6个字母(“{2,6}”)和“摘要”有8个。所以它被分成了两个有效的正则表达式。无论如何,\b应该强制存在字数限制,这样抽象应该失败,而ABSTRA CT应该通过。@第四位感谢,但它不起作用:/你想匹配抽象?还是不匹配?否则请尝试
\b[A-Z]{2,}(?:-[0-9]+)?\b
@Thefourthbird在我的问题上应该没有ABSTRACTSpot的对手。谢谢!
>>> import re
>>> text = 'ABSTRACT something HDFC, HDFC-141 and then some'
>>> pattern = r'\b[A-Z]{2,6}-*\d*\b'
>>> re.findall(pattern,text)
['HDFC', 'HDFC-141']
pattern = r'\b[A-Z]{2,6}\-*[0-9]*\b'
abbreviation = re.findall(pattern,text)
>>> import re
>>> text = 'ABSTRACT something HDFC, HDFC-141 and then some'
>>> pattern = r'\b[A-Z]{2,6}-*\d*\b'
>>> re.findall(pattern,text)
['HDFC', 'HDFC-141']