我有以下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 。
我该怎么做才能防止这种情况发生?
谢谢!
答案 0 :(得分:2)
您的正则表达式找到匹配项,因为-
连字符不是单词字符,并且您告诉正则表达式引擎(\b
)D
之后的字符应该是非字符字符。所以,你得到一个匹配。
您可以使用否定前瞻:
@"\B#ART#NC3FX(?![\w-])"
请参阅regex demo
\B
将匹配字符串开头的位置或非字边界,如果字符串后面跟着单词字符或连字符,(?![\w-])
前瞻将失败匹配。如果您测试独立字符串,请将\B
替换为^
(字符串的开头)。
答案 1 :(得分:1)
我不确定我是否理解你的答案,但为什么不寻找第一个答案;像:
@"^#ART#NC3FX(;|$)"
编辑:参见Avinash的答案