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