Regex拆分匹配组中特定单词模式不同值的字符串

本文关键字:模式 字符串 单词 拆分 Regex | 更新日期: 2023-09-27 18:30:13

这个问题与我之前问的问题(这个问题)非常相似,但我需要稍微更改一下。

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

伯克希尔哈撒韦公司(股票代码:BRK;NAICS:524126511130335212445292511110442210;沙丘:00-102-4314)华特迪士尼公司(股票:DIS;NAICS;713110512110711211515120;沙丘:00-690-4700)

使用以下值创建2个匹配项:

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

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

因此,对于上面的例子,它将匹配:

Ticker:BRKTicker:DIS

例如:

伯克希尔哈撒韦公司(NAICS:524126511130335212445292511110442210;沙丘:00-102-4314)华特迪士尼公司(Ticker:DIS;NAICS:713110512110711211515120;沙丘:00-690-4700)

结果是:

伯克希尔哈撒韦公司Ticker:DIS

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

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

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

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

我想现在应该改成这个:

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

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

Regex拆分匹配组中特定单词模式不同值的字符串

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

(?!'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

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