我正在研究一个Python函数,该函数将使用正则表达式在句子中查找括号内的首字母缩写词及其在句子中的含义。例如,“国务院(DOS)是负责美国国际关系的美国联邦执行部门。”
到目前为止我所拥有的是:
text = "The Department of State (DOS) is the United States federal executive department responsible for international relations of the United States."
pattern = re.compile(r"^(.*?)(?:\((.*)\))?$")
result = ''
for i in pattern.finditer(text):
result += text
print (result)
输出返回整个文本句子。我是新手使用正则表达式,可能误解了结构。根据我的理解,r
将匹配字符,^
断言字符串开头的位置,.*?
匹配任何字符,*?
匹配零和无限制时间?
将匹配零次或一次,\(\)
将与括号匹配,$
在末尾断言位置。如果我误解了这一点,我深表歉意,感谢您对此有所帮助。
谢谢!
答案 0 :(得分:0)
r将匹配字符
'r'是一个python前缀,它将导致该字符串被视为原始字符串文字。它不是re
语法的一部分。
?将匹配零次或一次,
此处引用的?
是(?:
的一部分,这意味着这将成为非捕获组,它是匹配的一部分但不作为匹配组返回。
$在最后断言位置
它断言整个字符串末尾的位置,而不仅仅是匹配的部分。
此模式将获取名称以及缩写:
pattern = re.compile("^(.*?)\((.*?)?\)")
for i in pattern.finditer(text):
name, abbrev = i.groups()
print name.strip(), abbrev
答案 1 :(得分:0)
你可以这样做。
import re
text = "The Department of State (DOS) is the United States federal executive department responsible for international relations of the United States."
acronym = re.search(r"(?<=\().*?(?=\))", text).group(0).lower()
regex = r"(?<= )"
for i in range(0, len(acronym)):
if i > 0: regex += " "
regex += acronym[i] + r".*?"
regex += r"(?= )"
meaning = re.search(regex, text).group(0).lower()
print("Acronym '"+acronym+"' stands for '"+meaning+"'.")
这不起作用,我根本不熟悉Python,但我想你可以很容易地修复它。我们的想法是将字符串放在括号内,然后从中创建一个正则表达式,搜索以首字母缩写词开头的单词。