如何查找字符串中包含数字的首字母缩写词

时间:2019-06-27 08:14:53

标签: python-3.x string find acronym

我需要创建一个函数来查找大写的首字母缩写词,包括一些包含数字的首字母缩写词,但是我只能检测仅包含字母的首字母缩写词。

一个例子:

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]

谢谢

3 个答案:

答案 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)

编辑:添加正则表达式模式的说明。