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