[英]C# Regex extract multiple lines between markers
我正在尝试提取在Cross Cross Streets~
行之后存在的Cross Street值,直到下一行在某处包含波浪号字符的情况下-在这种情况下,这是电话号码,在另一种情况下,它本身可能只是一行上的波浪号或其他领域。 它全部被拉入一个包含\\r\\n
字符的字符串中。 字符串的子集如下所示。
\r\nVenue:~SOLDOTNA\r\nCross Streets~\r\nDEAD END / STERLING HWY\r\n S KOBUK ST\r\nPhone:~(999) 999-9999\r\nQuadrant:~ES 1\r\n
我在Visual Studio 2015中使用C#。从以下示例中,我最终希望获得一个包含"DEAD END / STERLING HWY, S KOBUK ST"
的字符串
Venue:~SOLDOTNA
Cross Streets~
DEAD END / STERLING HWY
S KOBUK ST
Phone:~(999) 999-9999
我已经花了数小时尝试多个SO建议,但无济于事。 我最近尝试了以下方法:
Regex.Matches(data, "Cross Streets~\r\n(.+?)\r\n.+?~", RegexOptions.Singleline)[0].Groups
{System.Text.RegularExpressions.GroupCollection}
Count: 2
IsReadOnly: true
IsSynchronized: false
SyncRoot: {Cross Streets~
DEAD END / STERLING HWY
S KOBUK ST
Phone:~}
Results View: Expanding the Results View will enumerate the IEnumerable
认为Groups[1]
将包含我要查找的信息,但仅包括第一行。
Regex.Matches(data, "Cross Streets~\r\n(.+?)\r\n.+?~", RegexOptions.Singleline)[0].Groups[1]
{DEAD END / STERLING HWY}
Captures: {System.Text.RegularExpressions.CaptureCollection}
Index: 149
Length: 23
Name: "1"
Success: true
Value: "DEAD END / STERLING HWY"
虽然与我的环境不同,但这是通过Wiki regex文章请求的regex链接...(根本不匹配,尽管在我的C#立即窗口中,我正在获得如上所述的匹配项,但不完全相同我想要的是。)
您实际上并不需要正则表达式。 您可以使用String.Split方法并搜索所需的结果。
using System;
using System.Linq;
public class Program
{
public static void Main()
{
string x = @"Venue:~SOLDOTNA
Cross Streets~
DEAD END / STERLING HWY
S KOBUK ST
Phone:~(999) 999-9999";
string[] allResults = x.Split( new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None).ToArray();
foreach(string y in allResults)
{
Console.WriteLine(y + " = " +y.Length);
}
Console.WriteLine();
if(allResults.Contains("Cross Streets~") && allResults.Length > Array.IndexOf(allResults,"Cross Streets~")+1 )
{
Console.WriteLine( "Expeced Result : " + allResults[ Array.IndexOf(allResults,"Cross Streets~")+1 ]);
}
}
}
这是提琴手: https : //dotnetfiddle.net/zvBhMF
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.