我创建了一个正则表达式模式 (?<=[TCC|TCC_BHPB]\s\d{3,4})[-_\s]\d{1,2}[,]
这个模式匹配只是:
TCC 6005_5,
我应该在最后更改什么以匹配这两个字符串:
TCC 6005-5 ,
TCC 6005_5,
答案 0 :(得分:1)
您可以在表达式 (.*?
) 中添加非贪婪通配符:
(?<=(?:TCC|TCC_BHPB)\s\d{3,4})[-_\s]\d{1,2}.*?[,]
^^^
这现在也将匹配最后一位数字和逗号之间的任何字符。
正如评论中指出的那样,[TCC|TCC_BHPB]
是一个字符类而不是文字匹配,所以我已将其更改为 (?:TCC|TCC_BHPB)
,这大概是您的意图。
答案 1 :(得分:0)
模式 [TCC|TCC_BHPB]
的这一部分是与所列字符之一匹配的字符类。例如也可以写成 [|_TCBHP]
要“匹配”两个字符串,您可以匹配所有部分,而不是使用正向后视。
\bTCC(?:_BHPB)?\s\d{3,4}[-_\s]\d{1,2}\s?,
\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?,
或者如果你想匹配除换行符以外的 1 个或多个空格
\bTCC(?:_BHPB)?[\p{Zs}\t][0-9]{3,4}[-_\p{Zs}\t][0-9]{1,2}[\p{Zs}\t]*,