正则表达式以匹配可变数量的注释

时间:2019-06-21 16:06:37

标签: regex

我有一个具有可变数量注释的字符串,目标是获取

  

(1)注释类型

     

(2)带注释的字符串和

     

(3)获得没有注释的原始字符串。

例如,让我们尝试/ A_RESTAURANT(汉堡王)。在/ A_LOCATION(芝加哥市中心)。

我能够编写正则表达式以匹配单个注释。但没有线索做多个注释。

(.*)\/(A_.*)\((.*)\)(.*)

1 个答案:

答案 0 :(得分:2)

这是一个实现目标的功能:

import re

regex = re.compile(r"/A_(?P<a_type>[^()]*)\((?P<a_string>.*?)\)")

def process(text):
    def helper(matchobject):
        annotations.append((matchobject['a_type'], matchobject['a_string']))
        return matchobject['a_string']

    annotations = []

    clean_text = regex.sub(helper, text)

    return clean_text, annotations

测试:

text = "Let's try /A_RESTAURANT(Burger King). It is at /A_LOCATION(DOWNTOWN Chicago)."

clean_string, annotations = process(text)

print(clean_string)
print(annotations)

输出:

Let's try Burger King. It is at DOWNTOWN Chicago.
[('RESTAURANT', 'Burger King'), ('LOCATION', 'DOWNTOWN Chicago')]