我试图从不同的字符串中提取参考ID,其中ref ID看起来可能完全不同。我面临的困难是,如何知道ref id何时完成以及常规文本是否继续。
文字参考。 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的一部分。
答案 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次以上)
关闭捕获组更宽泛的模式可能是重复1+次数字和一个连字符,最后匹配字符类[A-Z0-9/.]+
Ref\. ((?:\d+(?: [\d-]+)+)*[A-Z0-9/.]+)
答案 1 :(得分:1)
这是使用带有回火的懒点的负前瞻实现此目的的一种方法:
Ref\.?\s+((?!\s+[^A-Z0-9])[A-Z0-9/. -])*(?= )
此模式假定参考数字仅由数字和大写字母组成。这里的逻辑是只要我们不看到的前面是空格,然后是 other 以外的任何空格,而不是数字或大写字母。末尾的(?= )
前瞻还确保该模式在与参考编号中的最后一项匹配之后停止。