问题
我正在尝试匹配 3 个组,其中一组是有条件的
字符串:12345-12345-1230
第 1 组:12345-12345
第 2 组:-123
第 3 组:0
但是,如果字符串不是“-000”,我只想匹配第 2 组。这意味着如果该部分为“-000”,则组 2 将为空白,或者为这 4 个字符的其他值; '-123' '-001' 等)。
这是正则表达式,它只接受任何内容作为第 2 组: ^(.{5}-.{5})(.{4})([0-9])$ regex101
我尝试过的
负向前瞻:
- ^(.{5}-.{5})(?!-000)([0-9])$
- ^(.{5}-.{5})(.{4}(?!.{4}))([0-9])$
或运算符:
- ^(.{5}-.{5})(-000)|(.{4})([0-9])$
- 这是我最接近的结果,但是我无法让它与最终条件 ([0-9])$ 一起工作。将删除案例 (-000) 作为一个单独的组作为接受案例(而不是 -000)也是不理想的。
最佳答案
您可以尝试:
^(\d{5}-\d{5})(?:-000|(-\d{3}))(\d)$
查看在线demo .
^
- 行 anchor 开始。(
- 打开第一个捕获组。\d{5}-\d{5}
- 匹配 5 个数字、一个连字符,然后再匹配 5 个数字。)
- 关闭第一个捕获组。
(?:
- 打开非捕获组。-000
- 按字面意思匹配“-000”。|
- 用作或运算符的管道符号。(
- 打开第二个捕获组。-\d{3}
- 匹配连字符和 3 位数字。)
- 关闭第二个捕获组。
)
- 关闭非捕获组。
(
- 打开第三个捕获组。(\d)
- 匹配单个数字。)
- 关闭第三个捕获组。
$
- 结束行 anchor 。
如果您想捕获没有连字符的第二组,请尝试:^(\d{5}-\d{5})-(?:000|(\d{3}))(\d)$
关于regex - 如何在 REGEX 表达式中间包含一个子字符串(除了精确的子字符串)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64822643/