因此,我创建了以下正则表达式,该正则表达式从字符串中捕获了我需要的所有内容:

  const string tag = ":59";
  var result = Regex.Split(message, String.Format(":{0}[^:]?:*[^:]*", tag),RegexOptions.Multiline);


该字符串遵循以下模式:

:59A:/sometext\n
somemore text\n
:71A:somemore text


我正在尝试捕获:59A:和:71A之间的所有内容-尽管这不是一成不变的,因为:71A:可能还有其他问题。因此,为什么我要使用[^:]

编辑

因此,请明确我的要求。我有一个传递给C#方法的文件(字符串),该方法仅应返回参数标记中指定的那些值。例如,如果文件(字符串)包含以下标记:

:20:
:21:
:59A:
:71A:

并且我输入了59,那么我只需要返回标签:59A:到下一个标签(在本例中为:71A :)的开始之间的所有内容,但是可能还有其他事情。

最佳答案

您可以使用以下代码来匹配所需的内容:

string input = ":59A:/sometext\nsomemore text\n:71A:somemore text";
string pattern = "(?<=:[^:]+:)[^:]+\n";

var m = Regex.Match(input, pattern, RegexOptions.Singleline).Value;


如果要使用标记常量,则可以使用此代码

const string tag = ":59";
string input = ":59A:/sometext\nsomemore text\n:71A:somemore text";
string pattern = String.Format("(?<={0}[^:]*:)[^:]+\n", tag);

var m = Regex.Match(input, pattern, RegexOptions.Singleline).Value;

关于c# - 在正则表达式匹配中保留换行符,C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22347795/

10-11 02:09