正则表达式匹配C#中的整个字符串?

时间:2016-01-11 13:31:29

标签: c# regex

我有以下produtcs列表(在.txt文件中):

#ART#NC3FX;price1
#ART#NC3FX;price2
#ART#NC3FX;price3
#ART#NC3FXX;price1
#ART#NC3FXX;price2
#ART#NC3FXX;price3
#ART#NC3FXX;price1
#ART#NC3FXX;price2
#ART#NC3FXX;price3
#ART#NC3FX-HD;price1
#ART#NC3FX-HD;price2
#ART#NC3FX-HD;price3

我想得到第一个出现的所有事件( ART#NC3FX )。

使用此正则表达式

@"(^|\b)#ART#NC3FX(\b|$)";

我检索前三行,这很好,但我也得到参考线#ART#NC3FX-HD

我该怎么做才能防止这种情况发生?

谢谢!

2 个答案:

答案 0 :(得分:2)

您的正则表达式找到匹配项,因为-连字符不是单词字符,并且您告诉正则表达式引擎(\bD之后的字符应该是非字符字符。所以,你得到一个匹配。

您可以使用否定前瞻:

@"\B#ART#NC3FX(?![\w-])"

请参阅regex demo

\B将匹配字符串开头的位置或非字边界,如果字符串后面跟着单词字符或连字符,(?![\w-])前瞻将失败匹配。如果您测试独立字符串,请将\B替换为^(字符串的开头)。

答案 1 :(得分:1)

我不确定我是否理解你的答案,但为什么不寻找第一个答案;像:

@"^#ART#NC3FX(;|$)"

编辑:参见Avinash的答案