【问题标题】:Regex Split String at particular word pattern differant value in match group匹配组中特定单词模式不同值的正则表达式拆分字符串
【发布时间】:2012-04-04 17:07:11
【问题描述】:

这个问题与我之前提出的问题 (This Question) 非常相似,但我需要稍作改动。

所以在前面的问题中这个字符串

伯克希尔哈撒韦公司(代码:BRK;NAICS:524126、511130、335212、445292、511110、442210;Duns:00-102-4314)沃尔特迪斯尼公司(代码:DIS;NAICS:713110、512110、711211、5152: 00-690-4700)

使用这些值创建 2 个匹配项:

伯克希尔哈撒韦公司 华特迪士尼公司

现在我希望匹配项包含代码:XXX 或公司名称,首选代码为:XXX。

所以对于上面的例子,它会匹配:

代码: BRK 代码: DIS

对于这个例子:

伯克希尔哈撒韦公司 (NAICS: 524126, 511130, 335212, 445292, 511110, 442210; Duns: 00-102-4314) Walt Disney Co (Ticker: DIS; NAICS: 713110, 512110, 711211, 0-65120; Duns:-0 4700)

结果是:

伯克希尔哈撒韦公司 代码: DIS

我想我只是不太了解上一个问题中的正则表达式解决方案,无法理解如何修改它以适应这种模式。

正则表达式是用c#编写的

顺便说一下,以前的正则表达式解决方案是:

(?!\s*$)(.*?)(?:\([^)]*(?:(?:SIC|NAICS):[^)]*)+\)|$)

我想现在应该改成这样:

(?!\s*$)(.*?)(?:\([^)]*(?:(?:SIC|NAICS|Duns):[^)]*)+\)|$)

但是如果 Ticker 存在,我如何提取 Ticker: 并选择该值而不是另一个值?

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    我还在学习正则表达式,所以我不确定你是否可以对组使用条件逻辑。不过,作为替代方案,您可以按如下方式修改您的正则表达式,以便它还为股票代码捕获一个组(如果存在):

    (?!\s*$)(.*?)(?:\((Ticker:[^;]+)?[^)]*(?:(?:SIC|NAICS|Duns):[^)]*)+\)|$)
    

    然后你可以在你的 c# 代码中执行逻辑。我想这样的事情会起作用:

    Regex regex = new Regex(@"(?!\s*$)(.*?)(?:\((Ticker:[^;]+)?[^)]*(?:(?:SIC|NAICS|Duns):[^)]*)+\)|$)");
    Match match = regex.Match("Berkshire Hathaway Inc (NAICS: 524126, 511130, 335212, 445292, 511110, 442210; Duns: 00-102-4314) Walt Disney Co (Ticker: DIS; NAICS: 713110, 512110, 711211, 515120; Duns: 00-690-4700)");  
    while (match.Success) {
        if (match.Groups[2].Success)
        {
            Console.WriteLine(match.Groups[2].Value);
        }
        else
        {
            Console.WriteLine(match.Groups[1].Value);
        }
        match = match.NextMatch();
    }
    

    输出:

    Berkshire Hathaway Inc 
    Ticker: DIS
    

    【讨论】:

    • 哈哈。我喜欢这个解决方案,因为它很简单。
    • 您不能对组使用条件逻辑,顺便说一句。正则表达式仅用于按原样解析文本
    • @JustinPihony 感谢您的提示!总是很高兴收到:)
    【解决方案2】:

    我建议使用Expresso 之类的工具来计算您的正则表达式。它专为 C# Regex 设计,甚至可以将您需要使用的代码复制到剪贴板中。您可以将示例粘贴到工具中,然后调整您的正则表达式,直到它起作用。我发现这样的工具是编写正则表达式的必备工具。

    【讨论】:

    • 我正在使用Rad software,它有助于测试,但我对正则表达式还是新手,所以我不确定我是否理解语法。
    • 正则表达式好友虽然不是免费的,但也很棒
    猜你喜欢
    • 2013-08-09
    • 2021-05-23
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2015-07-11
    • 1970-01-01
    相关资源
    最近更新 更多