仅当前一个字符不存在时才匹配字符串

时间:2021-06-30 02:21:16

标签: regex

我想完全丢弃以字母 C 开头的匹配项。

这是一个示例文本,每一行都是一个单独的示例:

C4526913CA57248560A562492460C
A000008002A20839256662C
C370694CA102000979A68008192429291C

我使用的正则表达式是

[cC]?([0-9*dD]){5,}[cC]

匹配:

1: C4526913C
2: 562492460C
3: 20839256662C
4: C370694C
5: 68008192429291C

但我不想匹配以C开头的那些,我已经尝试过这些

(?!^[cC])[cC]?([0-9*dD]){5,}[cC]
(?![cC].*[cC])([cC]?([0-9*dD]){5,}[cC])

这增加了一个负面的展望,但它匹配除起始 C 之外的所有内容,而不是丢弃整个匹配。像这样:

C4526913C -> 4526913C

如何仅使用正则表达式来实现这一点?

1 个答案:

答案 0 :(得分:2)

您可以匹配您不想要的内容,并在一个组中捕获您想要保留的内容。

由于组 ([0-9*dD]){5,} 中只有一个字符类,因此您可以省略该组并重复字符类。

请注意,[0-9*dD] 匹配数字 0-9 或 *dD,但只有数字在示例数据中才能匹配。

[cC][0-9*dD]{5,}[cC]|([0-9*dD]{5,}[cC])

Regex demo

对于示例数据(没有 D d*),如果支持,您还可以使用后视:

(?<![cC0-9])[0-9]{5,}[cC]

Regex demo