如何使用正则表达式期待并找到所需字符串的结尾?

时间:2018-12-22 14:49:36

标签: python regex

我试图从不同的字符串中提取参考ID,其中ref ID看起来可能完全不同。我面临的困难是,如何知道ref id何时完成以及常规文本是否继续。

Text and regex examples

  

文字参考。 027 / 7203.00更多文字

     

-示例2:

     

文字参考。 01 733 7720 4055-07 5 21 28FC更多文本

     

-示例3:文本参考126281RBR Schoko更多文本

     

-示例4:文本参考号WAY101A.FT6141更多文本

     

-示例5:文本参考01 774 7699 4134-07 5 22 15FC更多文本

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

示例2,5。说明获取其余参考ID的问题。

示例3,4说明了让另一个单词在正则表达式上出现误报的问题。 Schoko 不是参考ID的一部分。

2 个答案:

答案 0 :(得分:1)

要匹配2种不同的格式,您可以将单个捕获组与alternation结合使用:

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

说明

  • Ref\. Match 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

答案 1 :(得分:1)

这是使用带有回火的懒点的负前瞻实现此目的的一种方法:

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

Demo

此模式假定参考数字仅由数字和大写字母组成。这里的逻辑是只要我们看到的前面是空格,然后是 other 以外的任何空格,而不是数字或大写字母。末尾的(?= )前瞻还确保该模式在与参考编号中的最后一项匹配之后停止。