C# 用于识别转义字符的正则表达式问题

C# 用于识别转义字符的正则表达式问题,c#,.net,regex,unicode,escaping,C#,.net,Regex,Unicode,Escaping,假设我们有以下字符串: @"Hello m\u00e9 name is Mat\u00bfQu" 我正在使用正则表达式: private static readonly Regex ESCAPING_REGEX = new Regex("\\+[^\"][a-zA-Z0-9]*", RegexOptions.Compiled); 但是,此正则表达式似乎不返回任何匹配项: MatchCollection matches = ESCAPING_REGEX.Matches(text); // ma

假设我们有以下字符串:

@"Hello m\u00e9 name is Mat\u00bfQu"
我正在使用正则表达式:

private static readonly Regex ESCAPING_REGEX = new Regex("\\+[^\"][a-zA-Z0-9]*", RegexOptions.Compiled);
但是,此正则表达式似乎不返回任何匹配项:

MatchCollection matches = ESCAPING_REGEX.Matches(text);
// matches.Count == 0
我尝试了正则表达式,它确实返回了我所寻找的两个匹配项


如何修复正则表达式以实现预期行为?(我们乐意接受任何改进建议。)

您的正则表达式声明是错误的,因为您需要在匹配的开始处添加一个文本
+
。查看正则表达式引擎的正则表达式:

  • \+
    -匹配文本
    +
  • [^”]
    -匹配除
  • [a-zA-Z0-9]*
    -匹配0个或更多数字或拉丁字母字符
如果您使用逐字字符串文字来创建正则表达式,例如

Regex.Matches(str, @"\\+[^""][a-zA-Z0-9]*");
你会得到两个匹配<逐字字符串中的code>\\文字将与文字
\
匹配,
+
将被视为量词

实际上,您甚至不需要
+
(因为它将匹配
\\\\\
)和
[^”“]
(除非在
\
之后有一些
,而这不是您想要匹配的),您可以使用

@"\\[a-zA-Z0-9]+"
要匹配子字符串(
\
匹配
\
[a-zA-Z0-9]+
将匹配范围内的一个或多个字符)


您的字符串是逐字格式的吗?@casimirithippolyte我很抱歉我的无知。什么是逐字格式?您问题的根源!@casimirithippolyte哦,我明白了!我的字符串确实是逐字格式的。我将更新我的问题以反映这一点。我尝试删除逐字格式,但仍然无法使用逐字字符串作为您的模式n也是。@Stribizev“和+”将被视为一个量词。-这是正确的吗?@Greenfeets:是的。