如何使用regex向前看并找到所需字符串的结尾?

2024-04-25 05:23:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从不同的字符串中提取引用id,其中ref id看起来可能非常不同。我面临的困难是,如何知道ref id何时完成,常规文本何时继续。你知道吗

Text and regex examples

text Ref. 027/7203.00 more text

-- example 2:

text Ref. 01 733 7720 4055-07 5 21 28FC more text

-- example 3: text Ref. 126281RBR Schoko more text

-- example 4: text Ref. WAY101A.FT6141 More text

-- example 5: Text Ref. 01 774 7699 4134-07 5 22 15FC More text

正则表达式: 参考号?((?:[A-Z\d./]+)([A-Z0-9]+)?|(?用法:[\d.]+)

例子2,5。说明获取ref id的其余部分的问题

例3、4说明了另一个单词在正则表达式中是假阳性的问题。Schoko不是ref id的一部分


Tags: and字符串text文本refidexamplemore
2条回答

要匹配这两种不同的格式,可以使用带有alternation的单个捕获组:

Ref\. (\d+(?: \d+){2} \d+-\d+(?: \d+){2} [A-Z0-9]+|[A-Z0-9/.]+)

解释

  • Ref\.匹配Ref.`后跟空格
  • (捕获组
    • \d+(?: \d+){2} \d+-\d+(?: \d+){2} [A-Z0-9]+匹配类似01 733 7720 4055-07 5 21的模式
    • |
    • [A-Z0-9/.]+匹配任何字符类的1+倍
  • )关闭捕获组

Regex demo

更宽泛的模式可以是重复1+倍的数字和连字符,并在末尾匹配字符类[A-Z0-9/.]+

Ref\. ((?:\d+(?: [\d-]+)+)*[A-Z0-9/.]+)

Regex demo

这里有一种方法可以通过使用一个缓和的懒点来进行消极的前瞻:

Ref\.?\s+((?!\s+[^A-Z0-9])[A-Z0-9/. -])*(?= )

Demo

此模式假定参考号仅由数字和大写字母组成。这里的逻辑是继续消费,只要我们前面没有看到的是一个空格,后面跟的是除数字或大写字母以外的任何东西。结尾处的(?= )向前看还确保模式在匹配参考号中的最后一个项之后停止。你知道吗

相关问题 更多 >