C#无法使RegEx适用于所有情况

时间:2017-04-04 15:55:30

标签: c# regex

我有以下数据:

  

HRB 760468:斯图加特CANNSITE GmbH,c / o Elvira Ehle博士,Rotdornweg 7,18119 Rostock。 GesellschaftmitbeschränkterHaftung。 Gesellschaftsvertrag vom 09.03.2017。

     
HRB 760481:Neckarsee 399. V V GmbH,Stuttgart,Kurt-Schumacher-Straße18-20,53113Bonn。 GesellschaftmitbeschränkterHaftung。 Gesellschaftsvertrag vom 22.03.2017。

我需要过滤掉:

  

HRB 760468:斯图加特CANNSITE GmbH,c / o Elvira Ehle博士,Rotdornweg 7,18119 Rostock

     
HRB 760481:Neckarsee 399. V V GmbH,Stuttgart,Kurt-Schumacher-Straße18-20,53113Bonn

我的RegEx是:@"HRB.\d+:[^.]+"

问题在于“Elvira博士”,因为它包含“。” - Regex将停在那里,而不是在“Gesellschaft mit”之前,我无法让它改变正则表达式,以便在这种情况下将它带到最后的“Rostock”/“Bonn”。

之后我尝试过滤掉“760468”,“CANNSITE GmbH”,“Stuttgart”,“Rotdornweg 7”,“18119” 为此我正在做以下事情 - 也许你可以帮助我改进这个(顺序就像上面的数据):

     Regex regexNummer = new Regex(@"\d+:");
     Regex regexFirma = new Regex(@":[^,]+");
     Regex regexStadt = new Regex(@", \w+.\w+.\w+.\w+,");
     Regex regexAdresse = new Regex(@", \w+.+\d,");
     Regex regexPlz = new Regex(@", \d+[^ ]+");
     string nummer = regexNummer.Match(match.Value).ToString().Replace(":", "");
     string firma = regexFirma.Match(match.Value).ToString().Replace(": ", "");
     string plz = regexPlz.Match(match.Value).ToString().Replace(", ", "");
     string stadt = regexStadt.Match(match.Value).ToString().Replace(", ", "");
     stadt = stadt.Replace(",", "");

     string adresse = regexAdresse.Match(match.Value).ToString();
     adresse = adresse.Remove(adresse.Length - 1);
     adresse = adresse.Substring(adresse.LastIndexOf(", ") + 1);
     adresse = adresse.Substring(1);

因为有太多不同类型的地址,所以经常会出现问题。

3 个答案:

答案 0 :(得分:2)

好像你在城市名称之前有某种邮政编码。您可以将其用于正则表达式。

以下正则表达式可以从您的示例中提取第一部分。

Regex.Match(txt, @"(^HRB .*?\d{5}\s+\S+\.)")

编辑:

修改正则表达式也可以使用下面的文本

  


HRB 760467:APC One UG(haftungsbeschränkt),内卡河畔罗滕堡,Lilienthalweg 3,72108,内卡河畔罗滕堡。 GesellschaftmitbeschränkterHaftung。 Gesellschaftsvertrag vom 22.03.2017。 Geschäftsanschrift:Lilienthalweg 3,72108 Rottenburg am Neckar。 Gegenstand:Entwicklung,Entwicklungsberatung,Herstellung sowie Vertrieb von elektronischen Produkten。 Stammkapital:1.500,00 EUR。

Regex.Match(txt, @"(<br>HRB .*?\d{5}\s+[\w\-\s]+\.)")

答案 1 :(得分:1)

我没有关于德语地址的专家,但从你给出的例子看来,你只需要来自&#34; HRB&#34;通过后跟五位数字。在正则表达式中,

HRB .+ \d{5} \w+

Play with it here

答案 2 :(得分:1)

也许RegEx不是正确的工具?在逗号上拆分并解析每个逗号分隔文本块。然后,也许,只是可能,您可以使用目标RegEx确定每个文本块中的内容,该目标RegEx可以告诉您该子字符串是否属于该类型。当多个模式匹配时仍然不知道如何处理。