所以,我必须匹配最后一个开闭括号之前的所有内容并将其分组。在最后一个开闭括号之后,尝试再次以某种模式获取值。
这是我的示例:
ID pqr () name:123.
这是我的正则表达式:
^(?P<JUNK>.*?)(?!\(.\))(\(.*\))?\sname\:(?P<name>\d+)\.$
现在,我得到了
ID pqr
键的 JUNK
和 123
键的 name
,这是完美的。
现在,使用这个正则表达式,它可以很好地处理以下字符串:
ID pqr (a) () name:123.
ID pqr (a) (b) () name:123.
ID pqr (a) (b) () name:123.
ID pqr (a) (b) (XX) name:123.
在回报中我得到这些输出:
{'JUNK': 'ID pqr ', 'name': '123'}
{'JUNK': 'ID pqr (a) ', 'name': '123'}
{'JUNK': 'ID pqr (a) (b) ', 'name': '123'}
{'JUNK': 'ID pqr (a) (b) ', 'name': '123'}
到目前为止,上面的字符串工作正常,但对于下面的字符串我遇到了一些麻烦
ID pqr (a) (b) (X) name:123.
ID pqr (aa) (b) (X) name:123.
ID pqr (a) (bb) (X) name:123.
对于这些字符串,我得到如下输出:
{'JUNK': 'ID pqr (a) (b) (X)', 'name': '123'}
{'JUNK': 'ID pqr ', 'name': '123'}
{'JUNK': 'ID pqr (a) ', 'name': '123'}
但基本上我想要这样:
{'JUNK': 'ID pqr (a) (b) ', 'name': '123'}
{'JUNK': 'ID pqr (aa) (b) ', 'name': '123'}
{'JUNK': 'ID pqr (a) (bb) ', 'name': '123'}
这是我的 regex101 尝试:https://regex101.com/r/AV8WlB/4
谁能指出我哪里错了?
尝试:
^(?P<JUNK>.*?)(\([^)]*\)\s)?name:(?P<name>\d+)\.$
参见:regex101
说明
^
:字符串的开头...(?P<JUNK>.*?)
:接着是JUNK...(\([^)]*\)\s)?
:那么,如果适用的话,最后一对括号...name:
:在文字“名称:”之前...(?P<name>\d+)
:并收集之前的号码...\.$
:最后的“。”在字符串的末尾。