【问题标题】:Match Acronym and their Meaning with Python Regex使用 Python 正则表达式匹配首字母缩写词及其含义
【发布时间】:2016-11-16 01:16:49
【问题描述】:

我正在开发一个 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 将匹配字符,^ 断言字符串开头的位置,.*? 匹配任何字符,*? 匹配零次到无限次,? 将匹配零次或一次,\(\) 将匹配括号,$ 在末尾断言位置。如果我对其中的任何内容有很大的误解,我深表歉意,我感谢您对理解这一点的任何帮助。

谢谢!

【问题讨论】:

  • 您当前的模式r"^(.*?)(?:\((.*)\))?$" 将匹配^ 行的开头,然后是(.*?),后面是括号\((.*)\)? 中的任何内容的0 或1 个实例@ 是在末尾行$。因此,如果括号中的内容位于行尾,您只会看到括号中的内容。
  • 嗨,这不是你要找的东西,但我在没有正则表达式的情况下用 python 做了这个来尝试解决同样的问题:gist.github.com/nmolivo/ed07ccc158e230b8e7fcaa3b04dbabc1希望它可以帮助!

标签: python regex


【解决方案1】:

r 将匹配字符

'r' 是一个 python 前缀,它将导致字符串被视为原始字符串文字。它不是re 语法的一部分。

那个?将匹配零次或一次,

这里提到的这个?(?: 的一部分,这意味着它成为一个非捕获组,它是匹配的一部分但不作为匹配组返回。

$ 断言最后的位置

它断言整个字符串末尾的位置,而不仅仅是匹配的部分。

此模式将获得名称以及缩写:

pattern = re.compile("^(.*?)\((.*?)?\)") 
for i in pattern.finditer(text):
    name, abbrev = i.groups() 
    print name.strip(), abbrev

【讨论】:

    【解决方案2】:

    你可以这样做。

    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,但我想你可以很容易地修复它。想法是获取括号内的字符串,然后从中创建一个正则表达式,搜索以首字母缩写词开头的单词。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多