【问题标题】:Match up to the comma - Regex匹配逗号 - 正则表达式
【发布时间】:2021-07-31 16:19:02
【问题描述】:

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

TCC 6005_5,

我应该改变什么来匹配这两个字符串:

TCC 6005-5 ,
TCC 6005_5,

【问题讨论】:

  • 你只允许空格还是允许最后一个数字后面的任何字符,只要它以逗号结尾?
  • @Llama 我想从 ex 的最后一个号码中获得匹配。从 -5 到 ,
  • 可以在最后匹配逗号前的可选空格(?<=TCC(?:_BHPB)?\s\d{3,4})[-_\s]\d{1,2} ?,regex101.com/r/ByZPSE/1
  • 使用(?<=(?:TCC|TCC_BHPB)\s\d{3,4})[-_\s]\d{1,2}\s*,,见demo。或者,(?<=TCC(?:_BHPB)?\s\d{3,4})[-_\s]\d{1,2}\s*,。如果数字和, 之间可以有任何文本,请使用(?<=TCC(?:_BHPB)?\s\d{3,4})[-_\s]\d{1,2}[^,]*,(如果最后一个, 丢失,甚至可以删除)。

标签: c# regex


【解决方案1】:

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

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

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

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

Try it online

【讨论】:

  • 不是我的 dv,但这部分 [TCC|TCC_BHPB] 应该是 (?:TCC|TCC_BHPB) 否则它是匹配列出的字符之一的字符类,甚至是 (?&lt;=TCC(?:_BHPB)?
  • @Thefourthbird 嗯。我只是相信他们的话,他们的其他表达方式工作正常,但你是对的。我会解决的。
【解决方案2】:

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

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

\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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多