如何在字符串中查找包含数字的首字母缩略词
How to find acronyms containing numbers in a string
我需要创建一个函数来查找大写首字母缩写词,包括一些包含数字的首字母缩写词,但我只能检测仅包含字母的首字母缩写词。
一个例子:
s= "the EU needs to contribute part of their GDP to improve the IC3 plan"
我试过了
def acronym(s):
return re.findall(r"\b[A-Z]{2,}\b", s)
print(acronym(s))
但我只得到
[EU,GDP]
我可以添加或更改什么以获得
[EU,GDP,IC3]
谢谢
尝试:
import re
def acronym(s):
return re.findall(r"\b(?:[0-9]+[A-Z][A-Z0-9]*)|(?:[A-Z][A-Z0-9]+)\b", s)
print(acronym('3I 33 I3 A GDP W3C'))
输出:
['3I', 'I3', 'GDP', 'W3C']
此正则表达式表示:
找到 \b
之间 "word boundaries" 之间的任何单词
- 以数字(或更多)开头,然后必须至少有一个大写字母,然后可以有其他字母和数字
- 以大写字母开头,然后至少有另一个大写字母或数字。
?:
允许我们不捕获 2 个组 (()|()
),而只能捕获一个。
此正则表达式不会匹配数字(例如 123
):
import re
s = "the EU needs to contribute part of their GDP to improve the IC3 plan"
def acronym(s):
return re.findall(r"\b([A-Z]{2,}\d*)\b", s)
print(acronym(s))
打印:
['EU', 'GDP', 'IC3']
Regex101 link here.
试试这个。
它类似于 Andrej 和 S. Pellegrino 的答案,但是它不会捕获像 '123'
这样的纯数字字符串,它会捕获在任何位置都有数字的字符串,而不仅仅是在末尾。
图案说明:
\b
- 匹配单词边界(字符串的开头)
(?=.*[A-Z])
- 断言后面是大写字母(即字符串至少包含一个大写字母)。这叫积极展望。
[A-Z\d]{2,}
- 匹配一个大写字母或数字两次或更多次。
\b
- 匹配另一个单词边界(字符串的结尾)。
import re
def acronym(s):
pattern = r'\b(?=.*[A-Z])[A-Z\d]{2,}\b'
return re.findall(pattern, s)
编辑: 添加正则表达式模式的说明。
我需要创建一个函数来查找大写首字母缩写词,包括一些包含数字的首字母缩写词,但我只能检测仅包含字母的首字母缩写词。
一个例子:
s= "the EU needs to contribute part of their GDP to improve the IC3 plan"
我试过了
def acronym(s):
return re.findall(r"\b[A-Z]{2,}\b", s)
print(acronym(s))
但我只得到
[EU,GDP]
我可以添加或更改什么以获得
[EU,GDP,IC3]
谢谢
尝试:
import re
def acronym(s):
return re.findall(r"\b(?:[0-9]+[A-Z][A-Z0-9]*)|(?:[A-Z][A-Z0-9]+)\b", s)
print(acronym('3I 33 I3 A GDP W3C'))
输出:
['3I', 'I3', 'GDP', 'W3C']
此正则表达式表示:
找到 \b
之间 "word boundaries" 之间的任何单词
- 以数字(或更多)开头,然后必须至少有一个大写字母,然后可以有其他字母和数字
- 以大写字母开头,然后至少有另一个大写字母或数字。
?:
允许我们不捕获 2 个组 (()|()
),而只能捕获一个。
此正则表达式不会匹配数字(例如 123
):
import re
s = "the EU needs to contribute part of their GDP to improve the IC3 plan"
def acronym(s):
return re.findall(r"\b([A-Z]{2,}\d*)\b", s)
print(acronym(s))
打印:
['EU', 'GDP', 'IC3']
Regex101 link here.
试试这个。
它类似于 Andrej 和 S. Pellegrino 的答案,但是它不会捕获像 '123'
这样的纯数字字符串,它会捕获在任何位置都有数字的字符串,而不仅仅是在末尾。
图案说明:
\b
- 匹配单词边界(字符串的开头)
(?=.*[A-Z])
- 断言后面是大写字母(即字符串至少包含一个大写字母)。这叫积极展望。
[A-Z\d]{2,}
- 匹配一个大写字母或数字两次或更多次。
\b
- 匹配另一个单词边界(字符串的结尾)。
import re
def acronym(s):
pattern = r'\b(?=.*[A-Z])[A-Z\d]{2,}\b'
return re.findall(pattern, s)
编辑: 添加正则表达式模式的说明。