在C#中使用\ b正则表达式不起作用?

时间:2010-03-15 17:59:00

标签: c# regex word-boundary

我想知道为什么以下正则表达式不匹配。

string query = "\"1 2\" 3";
string pattern = string.Format(@"\b{0}\b", Regex.Escape("\"1 2\""));
string repl = Regex.Replace(query, pattern, "", RegexOptions.CultureInvariant);

请注意,如果我从pattern中删除单词边界字符(\ b),则匹配正常。有没有关于'\ b'的事可能会绊倒它?

2 个答案:

答案 0 :(得分:3)

引号不是单词字符,因此\ b如果存在则不会匹配。引用前没有字符;所以,在引用之前,单词字符和非单词字符之间没有过渡。所以,没有比赛。

您正在尝试从字符串中删除单词字符。最直接的方法是用空字符串替换\w

string repl = Regex.Replace(query, "\w", "", RegexOptions.CultureInvariant);

答案 1 :(得分:0)

你期待一个空白。 它找不到一个。 替换

string query = "\"1 2\" 3";

string query = "\" 1 2 \" 3";

你会明白我的意思。