Python 如何使正则表达式只匹配整个单词而不分解单词?
我正在为一个文档创建一个缩略语表,并使用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代码: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
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']