繁体   English   中英

C#正则表达式提取标记之间的多行

[英]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#立即窗口中,我正在获得如上所述的匹配项,但不完全相同我想要的是。)

https://regex101.com/r/HpHSra/3

您实际上并不需要正则表达式。 您可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM