我正在尝试提取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"
虽然与我的环境不一样,但是这里有一个正则表达式链接,请求通过SO wiki正则表达式文章...(它根本不匹配,但在我的C#立即窗口中,我得到如上所示的匹配,只是不完全是我想要的。)
答案 0 :(得分:0)
你真的不需要正则表达式来做到这一点。您可以使用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 ]);
}
}
}