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,所以我不确定是否可以在组上使用条件逻辑。不过,作为一种替代方案,您可以如下修改您的正则表达式,以便它也捕获股票代码的组(如果存在):
(?!'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设计的,甚至会将您需要使用的代码复制到剪贴板中。您可以将示例粘贴到工具中,然后调整正则表达式,直到它起作用。我发现像这样的工具是编写正则表达式的必备工具。