匹配逗号 - 正则表达式

时间:2021-05-10 08:47:58

标签: c# regex

我创建了一个正则表达式模式 (?<=[TCC|TCC_BHPB]\s\d{3,4})[-_\s]\d{1,2}[,] 这个模式匹配只是:

TCC 6005_5,

我应该在最后更改什么以匹配这两个字符串:

TCC 6005-5 ,
TCC 6005_5,

2 个答案:

答案 0 :(得分:1)

您可以在表达式 (.*?) 中添加非贪婪通配符:

(?<=(?:TCC|TCC_BHPB)\s\d{3,4})[-_\s]\d{1,2}.*?[,]
                                           ^^^

这现在也将匹配最后一位数字和逗号之间的任何字符。

正如评论中指出的那样,[TCC|TCC_BHPB] 是一个字符类而不是文字匹配,所以我已将其更改为 (?:TCC|TCC_BHPB),这大概是您的意图。

Try it online

答案 1 :(得分:0)

模式 [TCC|TCC_BHPB] 的这一部分是与所列字符之一匹配的字符类。例如也可以写成 [|_TCBHP]

要“匹配”两个字符串,您可以匹配所有部分,而不是使用正向后视。

\bTCC(?:_BHPB)?\s\d{3,4}[-_\s]\d{1,2}\s?,

查看regex demo

  • \bTCC 防止部分匹配的单词边界,然后匹配 TCC
  • (?:_BHPB)?\s\d{3,4} 可选匹配 _BHPB,匹配一个空白字符和 3-4 个数字(使用 [0-9] 匹配一个数字 0-9)
  • [-_\s]\d{1,2} 匹配 - _ 或空白字符之一
  • \s?, 匹配一个可选的空格和 ,

请注意,\s 也可以匹配换行符。


使用后视:

(?<=TCC(?:_BHPB)?\s\d{3,4})[-_\s]\d{1,2}\s?,

Regex demo

或者如果你想匹配除换行符以外的 1 个或多个空格

\bTCC(?:_BHPB)?[\p{Zs}\t][0-9]{3,4}[-_\p{Zs}\t][0-9]{1,2}[\p{Zs}\t]*,

Regex demo