C# 提取~标记之间的文本

C# 提取~标记之间的文本,c#,regex,C#,Regex,我有以下字符串: ~header1 content1 content2 content3 content4 ~header2 content5 content6 content7 content8 ~header3 content9 content10 content11 content12 ~header4 我需要使用C语言中的正则表达式提取每个标题(~标题)之间的内容。如何做到这一点 我尝试了以下代码: string pattern = "\\~.*\\~"; MatchCollect

我有以下字符串:

~header1
content1
content2
content3
content4
~header2
content5
content6
content7
content8
~header3
content9
content10
content11
content12
~header4
我需要使用C语言中的正则表达式提取每个标题(
~标题
)之间的内容。如何做到这一点

我尝试了以下代码:

string pattern = "\\~.*\\~"; 

MatchCollection matches = Regex.Matches(data , pattern, RegexOptions.Multiline ) ;
但是没有得到任何输出

因此将有一个数组作为输出,假设其名称
m
及其内容:

m[0] = "~header1|content1|content2|content3|content4"; 
m[1] = "~header2|content5|content6|content7|content8";
etc 

您可以在此处使用
lookarounds

(?<=~header\d+)[\s\S]*?(?=~header\d+)

string strRegex = @"(?<=~header\d+)[\s\S]*?(?=~header\d+)";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"~header1" + "\n" + @"content1" + "\n" + @"content2" + "\n" + @"content3" + "\n" + @"content4" + "\n" + @"~header2" + "\n" + @"content5" + "\n" + @"content6" + "\n" + @"content7" + "\n" + @"content8" + "\n" + @"~header3" + "\n" + @"content9" + "\n" + @"content10" + "\n" + @"content11" + "\n" + @"content12" + "\n" + @"~header4";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }  
}

(?您可以在此处使用
lookarounds

(?<=~header\d+)[\s\S]*?(?=~header\d+)

string strRegex = @"(?<=~header\d+)[\s\S]*?(?=~header\d+)";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"~header1" + "\n" + @"content1" + "\n" + @"content2" + "\n" + @"content3" + "\n" + @"content4" + "\n" + @"~header2" + "\n" + @"content5" + "\n" + @"content6" + "\n" + @"content7" + "\n" + @"content8" + "\n" + @"~header3" + "\n" + @"content9" + "\n" + @"content10" + "\n" + @"content11" + "\n" + @"content12" + "\n" + @"~header4";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }  
}

(?您可以在此处使用
lookarounds

(?<=~header\d+)[\s\S]*?(?=~header\d+)

string strRegex = @"(?<=~header\d+)[\s\S]*?(?=~header\d+)";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"~header1" + "\n" + @"content1" + "\n" + @"content2" + "\n" + @"content3" + "\n" + @"content4" + "\n" + @"~header2" + "\n" + @"content5" + "\n" + @"content6" + "\n" + @"content7" + "\n" + @"content8" + "\n" + @"~header3" + "\n" + @"content9" + "\n" + @"content10" + "\n" + @"content11" + "\n" + @"content12" + "\n" + @"~header4";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }  
}

(?您可以在此处使用
lookarounds

(?<=~header\d+)[\s\S]*?(?=~header\d+)

string strRegex = @"(?<=~header\d+)[\s\S]*?(?=~header\d+)";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"~header1" + "\n" + @"content1" + "\n" + @"content2" + "\n" + @"content3" + "\n" + @"content4" + "\n" + @"~header2" + "\n" + @"content5" + "\n" + @"content6" + "\n" + @"content7" + "\n" + @"content8" + "\n" + @"~header3" + "\n" + @"content9" + "\n" + @"content10" + "\n" + @"content11" + "\n" + @"content12" + "\n" + @"~header4";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }  
}

(?这会帮你解决问题

string[] m = Regex.Split(value1, @"(?=~header)").Where(x => !string.IsNullOrEmpty(x)).ToArray();

这对你有好处

string[] m = Regex.Split(value1, @"(?=~header)").Where(x => !string.IsNullOrEmpty(x)).ToArray();

这对你有好处

string[] m = Regex.Split(value1, @"(?=~header)").Where(x => !string.IsNullOrEmpty(x)).ToArray();

这对你有好处

string[] m = Regex.Split(value1, @"(?=~header)").Where(x => !string.IsNullOrEmpty(x)).ToArray();

您可以使用正则表达式匹配以
~
开头,后跟
~
以外的任何字符的任何内容,然后用管道替换换行符:

var res = Regex.Matches(data, @"~[^~]*").Cast<Match>()
                  .Select(p => p.Value.Replace("\r\n", "|").TrimEnd('|'))
                  .ToList();
var res=Regex.Matches(数据,@“~[^]*”).Cast()
.Select(p=>p.Value.Replace(“\r\n”,“|”).TrimEnd(“|”))
.ToList();
结果:


如果您有混合换行符,则需要另一个
Regex.Replace(p,@“\r?\n |\r“,“|”)替换
内的
。选择

您可以使用Regex匹配任何以
~
开头,后跟
~
以外的字符的内容,然后用管道替换换行符:

var res = Regex.Matches(data, @"~[^~]*").Cast<Match>()
                  .Select(p => p.Value.Replace("\r\n", "|").TrimEnd('|'))
                  .ToList();
var res=Regex.Matches(数据,@“~[^]*”).Cast()
.Select(p=>p.Value.Replace(“\r\n”,“|”).TrimEnd(“|”))
.ToList();
结果:


如果您有混合换行符,则需要另一个
Regex.Replace(p,@“\r?\n |\r“,“|”)替换
内的
。选择

您可以使用Regex匹配任何以
~
开头,后跟
~
以外的字符的内容,然后用管道替换换行符:

var res = Regex.Matches(data, @"~[^~]*").Cast<Match>()
                  .Select(p => p.Value.Replace("\r\n", "|").TrimEnd('|'))
                  .ToList();
var res=Regex.Matches(数据,@“~[^]*”).Cast()
.Select(p=>p.Value.Replace(“\r\n”,“|”).TrimEnd(“|”))
.ToList();
结果:


如果您有混合换行符,则需要另一个
Regex.Replace(p,@“\r?\n |\r“,“|”)替换
内的
。选择

您可以使用Regex匹配任何以
~
开头,后跟
~
以外的字符的内容,然后用管道替换换行符:

var res = Regex.Matches(data, @"~[^~]*").Cast<Match>()
                  .Select(p => p.Value.Replace("\r\n", "|").TrimEnd('|'))
                  .ToList();
var res=Regex.Matches(数据,@“~[^]*”).Cast()
.Select(p=>p.Value.Replace(“\r\n”,“|”).TrimEnd(“|”))
.ToList();
结果:


如果您有混合换行符,则需要在
中使用另一个
Regex.Replace(p,@“\r?\n\r“,“|”)
。选择

您必须使用
RegexOptions。单线
您必须使用
RegexOptions。单线
您必须使用
RegexOptions。单线
您必须使用
RegexOptions.Singleline