我正在尝试从不同的字符串中提取引用id,其中ref id看起来可能非常不同。我面临的困难是,如何知道ref id何时完成,常规文本何时继续。你知道吗
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的一部分
要匹配这两种不同的格式,可以使用带有alternation的单个捕获组:
解释
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/.]+
Regex demo
这里有一种方法可以通过使用一个缓和的懒点来进行消极的前瞻:
Demo
此模式假定参考号仅由数字和大写字母组成。这里的逻辑是继续消费,只要我们前面没有看到的是一个空格,后面跟的是除数字或大写字母以外的任何东西。结尾处的
(?= )
向前看还确保模式在匹配参考号中的最后一个项之后停止。你知道吗相关问题 更多 >
编程相关推荐