首页 文章

避免与正则表达式中的前一个单词的边界

提问于
浏览
2

我有一个正则表达式,它检测到一个名为 PO Number 的东西,它是一个PO编号后面跟着一些字符,这些字符可能是也可能不是数字,但肯定包含一个数字 . 它也可以有空格 .

您可以看到link来查找问题 .

Pattern:

((P\s*o\s*(\#|Number|No|\.)*\s*([:=\-\'\s\.])?\s*(\d*\s?([A-Z\-\/]*\s?\d+)+[A-Z\-]*)))

当出现以下情况时会出现问题:

Case 3. Ship on 123

这里p后跟o,以下条件适合匹配 . 但我需要检查'p'之前的条件'shi'p .

很明显,我需要实现一些东西,以避免p前面有一个普通的单词[A-Z],但如果它前面有一个空格或一个数字,则允许p . 以下条件应该通过 .

Case 1. YO#11111PO#2015 S53-55A

Case 2. YO#12345_PO#234 S34-34A

我尝试使用字边界 \b ,但这导致案例1和2失败 . 还有另一种方式吗?

1 回答

  • 3

    尝试使用 (?:[^a-z]) 前面的正则表达式

    这是一个非捕获组,因此当您解释组时,它不会出现在列表中 .

相关问题