【问题标题】:C#, Regex, ASCII Escape Characters - won't matchC#、正则表达式、ASCII 转义字符 - 不匹配
【发布时间】:2017-11-16 21:45:53
【问题描述】:
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());
}

注意:您无法在我的变量“line2parse”中的 [36 之前看到 ESC 序列,但它就在那里。如果我想让它显示在 Notepad++ 中,我会按住 ALT 并在小键盘上输入“027”。然后它在 Notepad++ 中显示为 ESC。在 C# 控制台中,它显示为向左箭头。具有讽刺意味的是,我可以执行“ALT + 27”,它会在 Notepad++ 中显示左箭头(但如果我添加 0,它会显示 ESC 而不是箭头)

我正在做许多正则表达式匹配,所以问题不在于我的正则表达式变量或类似的东西。尽管它在此站点上工作,但我无法使其正确匹配:http://regexstorm.net/tester

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

我做错了什么?

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

【问题讨论】:

  • 你能解释一下你最终需要得到什么吗? Escape Matched: [36mA Rocky Landing?但是您的代码正在运行。或者直接抓住A Rocky Landing? 然后grab match.Groups[1].Value
  • 对 ESC 或字符串中的任何其他非可视化字符使用 unicode:string pat12 = "\\e\u02B\\[36m(.+)";
  • @Novaterata OP 正则表达式 works,你的不一样,甚至无法编译。 Derek,请解释一下你在做什么。
  • 也许是因为我当时不明白这个问题。我试图解决注释中的内容。我想我错过了一次逃脱。我没有提供解决方案,只是整个 ALT-27 ESC 的解决方法。您不需要使用 ALT 键在 C# 中的字符串中输入内容
  • 我正在解析一个日志文件。在日志文件中,ASCII 代码代表颜色。我无法准确地向您展示它的外观,因为这里没有显示 ESC 字符,但是在 2 个 ascii 标签之间是单词。我想得到两个标签之间的单词。我更新了我的 OP 以准确显示我所追求的。我的问题仍然存在,它永远不会匹配。

标签: c# regex ascii


【解决方案1】:

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

string pat12 = @"\x1b\[36m(.+)";

【讨论】:

  • 这行得通。另外,由于此文档,我认为 \e 是转义字符的转义序列:docs.microsoft.com/en-us/dotnet/standard/base-types/… 所有这一切可能与我的 .txt 文件是错误的“类型”(意思是 ANSI、UNICODE 等)有关方式,我的日志文件是原样的,我使用 \x1b 而不是 \e 工作。谢谢。
  • 有趣。快速 LINQPad 测试使用模式中的\e 与字符串中的\x1b 进行比较。 C# 中没有非 Unicode 字符串类型,因此无论您的文件格式如何,您都可能失败。
  • 在这些测试中我注意到的另一件事是,如果我从我的日志文件复制/粘贴到一个新的 .txt 文件中,指向左侧的小箭头实际上是指向左侧的箭头大小的一半,如果我只需手动输入 ALT 27。事实证明 \e 也没有检测到,但 \1xb 检测到“原始”(带有较小的箭头)。这些符号显示为不同大小的事实向我表明,尽管所有“测试”都表明它们是相同的,但有些东西是不同的,并且有些东西正在破坏我使用 \e 的尝试
猜你喜欢
  • 1970-01-01
  • 2011-01-08
  • 2013-09-22
  • 2013-05-01
  • 2011-12-21
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多