如何从大量丑陋的字符串中提取特定字符串的PART?

时间:2012-11-08 17:34:04

标签: .net regex

我有一个包含网页所有数据源的变量。它是一个包含大量单词,字符串,特殊字符等的大字符串。

我想通过这个变量并提取票号。门票之后/之前是.json。在下面的例子中,我的列表只有1,即值15。

https://company.zendesk.com/api/v2/tickets/15.json

此网页将在大量文本之间添加此链接的倍数。在下面的例子中,我的列表将有2个项目,值为19和20。

https://company.zendesk.com/api/v2/tickets/19.json blahblahblajlkdfjfaiofjd3289239lkdj
2398283j;lkjfe89j2pefj2efljefkj
https://company.zendesk.com/api/v2/tickets/20.json blah blhahblbahlhkaldk

如何从这个庞大的文件中的这些链接中提取票证号码并将它们放入列表中?

我会使用正则表达式吗?我真的不确定我是怎么做到的。

顺便说一下,这个页面没有格式。它不像是一个XML文档或任何东西。

谢谢!

1 个答案:

答案 0 :(得分:1)

这样的事情应该让你开始工作

        string pattern = @"https://company.zendesk.com/api/v2/tickets/\d+.json";
        Regex regex = new Regex(pattern);
        MatchCollection mc = regex.Matches("input string here");

        foreach(Match m in mc)
        {
            Console.Write(m.Value);
        }

<强> @ “https://company.zendesk.com/api/v2/tickets/\d+.json”;

注意粗体部分。 @ 表示它是一个文字字符串,因此您不必双重转义\ \ d 是任何数字的替身。 + 表示前一个字符出现1次或更多次。 *意味着它会出现 0 或更多次。

这里有一个关于如何进一步定制模式http://msdn.microsoft.com/en-us/library/az24scfc.aspx

的参考

要获得票号,您可以将"\d+"放在括号中 https://company.zendesk.com/api/v2/tickets/(\d+).json"

然后您的匹配将有一个名为Groups的属性,您的票号将是其中一个组

            Console.Write(m.Groups[i].Value);

此时,您可以使用一些启发式过滤掉组的票号组中的完整匹配组,包括但不限于字符串长度,或者您可以使用另一个正则表达式。