【发布时间】:2020-06-28 03:03:26
【问题描述】:
Regex101 测试者:https://regex101.com/r/Yfp311/2
我很难让以下正则表达式模式正常工作。对于下面的示例文本字符串,REF1 匹配整行,如果在行中找到“//[text]”,则忽略应该匹配的 可选REF2 组。
目前,正则表达式不承认 //[text] 并且错误地将整个文本匹配为 REF1。我假设这是贪婪匹配的一个特征..但是我没有成功实现非贪婪模式,并且前瞻/后视(似乎没有工作)。
任何帮助或指导将不胜感激...不确定我缺少什么,因为我认为我当前的正则表达式模式应该可以正常工作。如果我能澄清任何事情,请告诉我!谢谢!
^(?P<ID>[A-Z][A-Z0-9]{3})?(?P<REF1>.+)(//(?P<REF2>.+))?(\n?(?P<EXTRA>.+))?$
TEX1CNS0P5-AA//CAT-523-VID-00EOS-0
XUX PETER LAB RANDOM TEXT DM5.
TEX2BFTBSH9999SBRT2L
RATRACE201
TEX3GWS0P2-AA//D-14839048-99-3
THERE WAS 200 COALS IN HIS STOCKING.
预期匹配:
- 字符串 1:
- id: TEX1
- ref1: CNS0P5-AA
- ref2: CAT-523-VID-00EOS-0
- 额外:XUX PETER LAB 随机文本 DM5。
- 字符串 2:
- id: TEX2
- ref1: BFTBSH9999SBRT2L
- ref2:(不匹配,因为“//”未出现在此文本中)
- 额外:RATRACE201
- 字符串 3:
- id: TEX3
- ref1: GWS0P2-AA
- ref2: D-14839048-99-3
- 额外:他的库存中有 200 块煤炭。
【问题讨论】:
-
如果您的问题以您正在尝试做的事情的陈述开始,而不参考代码,然后为每个显示提供一个或多个示例(如果需要)进行说明,那么对于读者来说会容易得多想要的结果。然后才引入需要修复的代码。
-
@CarySwoveland 谢谢,以后我会尽量简洁的。
标签: python regex string regex-lookarounds regex-greedy