我想知道为什么以下正则表达式不匹配。
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'的事可能会绊倒它?
答案 0 :(得分:3)
引号不是单词字符,因此\ b如果存在则不会匹配。引用前没有字符;所以,在引用之前,单词字符和非单词字符之间没有过渡。所以,没有比赛。
您正在尝试从字符串中删除单词字符。最直接的方法是用空字符串替换\w
:
string repl = Regex.Replace(query, "\w", "", RegexOptions.CultureInvariant);
答案 1 :(得分:0)
你期待一个空白。 它找不到一个。 替换
string query = "\"1 2\" 3";
与
string query = "\" 1 2 \" 3";
你会明白我的意思。