在 python 中遇到负向前瞻正则表达式问题

问题描述 投票:0回答:1

所以,我必须匹配最后一个开闭括号之前的所有内容并将其分组。在最后一个开闭括号之后,尝试再次以某种模式获取值。

这是我的示例:

ID  pqr () name:123.

这是我的正则表达式:

^(?P<JUNK>.*?)(?!\(.\))(\(.*\))?\sname\:(?P<name>\d+)\.$

现在,我得到了

ID  pqr 
键的
JUNK
123
键的
name
,这是完美的。

现在,使用这个正则表达式,它可以很好地处理以下字符串:

  1. ID pqr (a) () name:123.
  2. ID  pqr (a) (b) () name:123.
  3. ID  pqr (a) (b) () name:123.
  4. ID  pqr (a) (b) (XX) name:123.

在回报中我得到这些输出:

  1. {'JUNK': 'ID  pqr ', 'name': '123'}
  2. {'JUNK': 'ID pqr (a) ', 'name': '123'}
  3. {'JUNK': 'ID pqr (a) (b) ', 'name': '123'}
  4. {'JUNK': 'ID pqr (a) (b) ', 'name': '123'}

到目前为止,上面的字符串工作正常,但对于下面的字符串我遇到了一些麻烦

  1. ID  pqr (a) (b) (X) name:123.
  2. ID  pqr (aa) (b) (X) name:123.
  3. ID  pqr (a) (bb) (X) name:123.

对于这些字符串,我得到如下输出:

  1. {'JUNK': 'ID  pqr (a) (b) (X)', 'name': '123'}
  2. {'JUNK': 'ID  pqr ', 'name': '123'}
  3. {'JUNK': 'ID  pqr (a) ', 'name': '123'}

但基本上我想要这样:

  1. {'JUNK': 'ID  pqr (a) (b) ', 'name': '123'}
  2. {'JUNK': 'ID  pqr (aa) (b) ', 'name': '123'}
  3. {'JUNK': 'ID  pqr (a) (bb) ', 'name': '123'}

这是我的 regex101 尝试:https://regex101.com/r/AV8WlB/4

谁能指出我哪里错了?

python regex
1个回答
0
投票

尝试:

^(?P<JUNK>.*?)(\([^)]*\)\s)?name:(?P<name>\d+)\.$

参见:regex101


说明

  • ^
    :字符串的开头...
  • (?P<JUNK>.*?)
    :接着是JUNK...
  • (\([^)]*\)\s)?
    :那么,如果适用的话,最后一对括号...
  • name:
    :在文字“名称:”之前...
  • (?P<name>\d+)
    :并收集之前的号码...
  • \.$
    :最后的“。”在字符串的末尾。
© www.soinside.com 2019 - 2024. All rights reserved.