RegEx模式字符串中的转义字符

本文关键字:转义字符 字符串 模式 RegEx | 更新日期: 2023-09-27 18:24:40

我正试图从下面的字符串中提取MTQ0ODQ3NjcyNDoxNDQ4NDc2NzI0OjE6LTM4OTc1OTc2MjM4MDc1OTM2NjY6MTQ0ODQ3NjAwMzowOjA6NTQw

我对''(反斜杠)字符有问题。如何在C#中逃离这些。是否有任何文档显示regex模式中需要转义的字符,以及如何转义它们?

first_cursor''":''"MTQ0ODQ3NjcyNDoxNDQ4NDc2NzI0OjE6LTM4OTc1OTc2MjM4MDc1OTM2NjY6MTQ0ODQ3NjAwMzowOjA6NTQw''"

我试过以下几种,但都没有用。我尽量避免必须完全转义反斜杠:

MatchCollection matches = Regex.Matches(content, "first_cursor*.quot;([-0-9A-Za-z]+)");

任何帮助都将不胜感激。

RegEx模式字符串中的转义字符

在C#中,字符串中的每个反斜杠都可以写成''''

您可以使用以下内容:

MatchCollection matches = Regex.Matches(content, "first_cursor''''{2}":''''{2}&quot([-0-9A-Za-z]+)");

在C#中编写RegEx字符串时,我更喜欢使用逐字逐句的字符串文字:

string pattern = @"first_cursor''''":''''"([-0-9A-Za-z]+)''''"";

这可以防止你不得不两次逃脱斜杠;一次用于C#,另一次用于RegEx引擎。

顺便说一句,当将路径存储在字符串中时,这种语法也很有用:

string logFile = @"C:'Temp'mylog.txt";

甚至支持SQL命令的多行,例如:

string query = @"
    SELECT *
      FROM tblStudents
     WHERE FirstName = 'Bobby'
       AND LastName = 'Tables'
";

您可以使用前瞻来淘汰一些竞争者:

var example = @"first_cursor''":''"MTQ0ODQ3NjcyNDoxNDQ4NDc2NzI0OjE6LTM4OTc1OTc2MjM4MDc1OTM2NjY6MTQ0ODQ3NjAwMzowOjA6NTQw''"";
var regex = new Regex("(?<!&[-0-9A-Za-z]*)(?<!_[-0-9A-Za-z]*)[-0-9A-Za-z]+");
var matches = regex.Matches(example);
foreach(var match in matches)
{
  if (match.ToString() != "first")
  {
    Console.WriteLine(match);
  }
}

这会给你两场比赛。一个用于第一个,一个用于您要查找的字符串。然后你可以迭代匹配,看看它是否不是"第一个",那么它应该是你想要的。