我需要创建一个函数来查找大写的首字母缩写词,包括一些包含数字的首字母缩写词,但是我只能检测仅包含字母的首字母缩写词。
一个例子:
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]
谢谢
答案 0 :(得分:2)
尝试:
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
之间,这是“词边界”)
?:
允许我们不捕获2个组(()|()
),而只能捕获一个。
答案 1 :(得分:0)
此正则表达式与数字不匹配(例如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链接here。
答案 2 :(得分:0)
尝试一下。
它与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)
编辑:添加正则表达式模式的说明。