C#,正则表达式,ASCII转义字符-won';不匹配

C#,正则表达式,ASCII转义字符-won';不匹配,c#,regex,ascii,C#,Regex,Ascii,注意:在我的变量“line2parse”中,您无法看到[36]之前的ESC序列,但它在那里。如果我想让它显示在记事本++中,我会按住ALT键并在numpad上键入“027”。然后它在记事本++中显示为ESC。在C#console中,它显示为一个左箭头。讽刺的是,我可以执行“ALT+27”它在记事本++中显示了左箭头(但如果我添加0,它会显示ESC而不是箭头) 我正在进行许多正则表达式匹配,因此问题不在于我的正则表达式变量或类似的任何东西。我无法使其正确匹配,尽管它在此网站上工作: 在那个网站上,

注意:在我的变量“line2parse”中,您无法看到[36]之前的ESC序列,但它在那里。如果我想让它显示在记事本++中,我会按住ALT键并在numpad上键入“027”。然后它在记事本++中显示为ESC。在C#console中,它显示为一个左箭头。讽刺的是,我可以执行“ALT+27”它在记事本++中显示了左箭头(但如果我添加0,它会显示ESC而不是箭头)

我正在进行许多正则表达式匹配,因此问题不在于我的正则表达式变量或类似的任何东西。我无法使其正确匹配,尽管它在此网站上工作:

在那个网站上,这是一个模式:“\e[36m(+)”(不带引号),这是输入:[36mA岩石着陆(同样你看不到逃生的东西)。然后它告诉我$1将是“岩石着陆”,但在我的实际代码中,它不匹配

我做错了什么


我已经浏览了很多其他类似的帖子,根据他们的说法,我相信这应该是可行的。我甚至尝试了[^\x00-\x7F]作为我的转义字符捕获,但仍然不匹配。

为什么你认为转义字符的转义序列是
\e
呢?你需要使用
\x1b

string pat12 = @"\e\[36m(.+)";
line2parse = "[36mA Rocky Landing";
if (Regex.Match(line2parse,pat12).Success)
{
    Console.WriteLine("ROOM NAME: "+Regex.Match(line2parse,pat12).Groups[1].ToString().Trim());
}

你能解释一下你最后需要得到什么吗?
Escape Matched:[36mA Rocky Landing
?但你的代码当时正在工作。或者干脆抓住
一个Rocky Landing?
。使用unicode作为ESC或字符串中任何其他非可视化字符:
string pat12=“\\e\u02B\\\[36m(+)
@novatata OP regex works,你的是不同的,甚至没有编译。德里克,请解释你在做什么。可能是因为当时我不理解这个问题。我试图解决笔记中的问题。我想我错过了一个逃避。我没有提供解决方案,只是整个ALT-27 ESC的解决方案。你不应该这样做不需要使用ALT键在C#中的字符串中输入内容。我正在解析日志文件。日志文件中有表示颜色的ASCII码。我无法准确显示它的外观,因为这里不显示ESC字符,但两个ASCII标记之间是单词。我想获得两个标记之间的单词。我更新了OP以显示ex事实上,我所追求的是。我的问题仍然是,它从不匹配。这是有效的。而且,我认为\e是转义字符的转义序列,因为有了这个文档:所有这些可能都与我的.txt文件的“类型”错误有关(意思是ANSI、UNICODE等)不管是哪种方式,我的日志文件保持原样,我使用\x1b而不是\e工作正常。谢谢。很有趣。快速LINQPad测试可以使用模式中的
\e
,与字符串中的
\x1b
进行比较。C中没有非Unicode字符串类型,因此,即使您的文件格式如何,也不会失败。一个在这些测试中,我注意到的另一件事是,如果我将日志文件复制/粘贴到一个新的.txt文件中,如果我只是手动键入ALT 27,则指向左侧的小箭头实际上是指向左侧的箭头的一半大小。结果是\e没有检测到这两个箭头,但\1xb检测到了“原始的”(使用较小的箭头)。事实上,这些符号显示为不同的大小,这向我表明,所有“测试”都表明它们是相同的,有些东西是不同的,有些东西正在破坏我使用\e的尝试
string pat12 = @"\x1b\[36m(.+)";