Python正则表达式。在匹配问题之间捕获文本

时间:2016-02-01 18:11:32

标签: regex regex-negation

正则表达式的新手,无法获得正确的匹配。

我有以下字符串:

  

股东周年大会将于2016年1月13日上午10点在本公司位于汉普郡贝辛斯托克Telford路的Unity House,RG21 6YJ的注册办公室举行。

     

公司宣布其2016年度股东大会将于2016年2月11日上午10点在伦敦卢顿机场,卢顿,贝德福德郡,LU2 9PF举行。

我正在尝试从最后一次'at'中提取地址,直到邮政编码。所以Unity House,Telford Road,Basingstoke,Hampshire,RG21 6YJ和Hangar 89,London Luton Airport,Luton,Bedfordshire,LU2 9PF

这就是我使用的(at)(?!.*at)(.*)\s([A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2}) 它只提取第二个地址。有什么想法吗?

由于

1 个答案:

答案 0 :(得分:2)

您希望使用((?:(?!at).)*)而不是(?!.*at)(.*)来避免跳过at

(at)((?:(?!at).)*)\s([A-Z]{1,2}[0-9][A-Z0-9]? [0-9][ABD-HJLNP-UW-Z]{2})

See demo at regex101

如果您使用带有s标志的(at)(?!.*at)(.*),则只有前一个at而不是另一个at。所以预计只有最后一个匹配。 (at)((?:(?!at).)*)不会跳过另一个at