2017-04-04 19 views
1

我有以下數據,例如:C#無法獲得正則表達式工作的所有情況

HRB 760468:CANNSITE有限公司,斯圖加特,C/O博士埃爾維拉Ehle,Rotdornweg 7,18119羅斯托克。有限責任公司。公會於2017年3月9日。

HRB 760481:Neckarsee 399 VV有限公司,斯圖加特,庫爾特 - 舒馬赫 - 大街18-20,53113波恩。有限責任公司。公會於2017年3月22日。

我需要過濾掉:

HRB 760468:CANNSITE有限公司,斯圖加特,C/O博士埃爾維拉Ehle,Rotdornweg 7,18119羅斯托克

HRB 760481:Neckarsee 399 VV有限公司,斯圖加特,庫爾特 - 舒馬赫 - 大街18-20,53113波恩

我正則表達式是:@"HRB.\d+:[^.]+"

太陽麻煩是因爲它含有的情況下,「博士埃爾維拉」「」 - 正則表達式將停在那裏,而不是正確的「公司」之前,我無法得到它的工作來改變正則表達式在這種情況下,到底要得到它的「羅斯托克」 /「波恩」。

我曾嘗試濾除後「760468」,「CANNSITE有限公司」,「斯圖加特」,「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); 

因爲有這麼多不同類型的地址就經常開裂了

+0

地址解析很難,但看起來你只需要到地址的末尾。所以,跳過其他一切:確定最後的獨特之處。「先前有什麼共同點?例如,它會始終是5位數字空間單個單詞嗎? (例如「53113波恩」)。如果是這樣,你可以像這樣找到它。當所有其他都失敗http://regex101.com –

+0

您的數據在一行或多行?從上面的例子來看,它似乎是一條多線。 –

+0

看看這裏:https://pastebin.com/cBHHuENL有整個例子,我解釋一下我想做什麼 – iDraGoN

回答

2

好像你有某種郵編城市名稱之前。您可以可能利用沒有爲你的正則表達式。

下面的正則表達式工作正常,從雙方你的例子中提取的第一部分。

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

編輯:APC一個UG(有限),內卡河畔羅滕堡,Lilienthalweg 3,72108羅滕上午:

修改正則表達式與下面的文字太


HRB 760467上班內卡河。有限責任公司。公會於2017年3月22日。商家地址:Lilienthalweg 3,72108內卡河畔羅滕堡。主題:研製,開發諮詢,生產和銷售的電子產品。股本:1.500,00歐元。

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

我會隨身攜帶它很少,謝謝你。你可以在這裏看看整個事情。 https://pastebin.com/cBHHuENL – iDraGoN

+0

我將它改爲:'
HRB。*?\ d + \ s + \ S + \。'因爲我有{5}也可以是4/3/2。另外
,因爲它找到2個匹配,否則。但仍然有些工作,有些則不是:內卡河畔羅騰堡Rottenburg,Lilienthalweg 3,72108 Rottenburg am Neckar。 Gesellschaft mitbeschrä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。}'我需要在'之前。 Gesellschaft mit'啓動 – iDraGoN

+0

@iDraGoN你的文本總是包含'
'? – Vikhram

1

我在德國的地址不是專家,但是從例子中你給它出現。您只需通過隨後五位數的話需要的一切,從「HRB」。在正則表達式,

HRB .+ \d{5} \w+ 

Play with it here

+0

第一次嘗試我得到的結果「HRB 760466:Europa Institut International Private College of Languages and Business GmbH,Reutlingen,Unter den Linden 15,72762 Reutlingen。Gesellschaft mitbeschränkterHaftung。Gesellschaftsvertrag vom 10.01.2017 mitÄnderungvom 22.03.2017。Geschäftsanschrift:Unter den Linden 15,72762 Reutlingen「 – iDraGoN

1

也許正則表達式是不正確的工具?以逗號分隔並分析每個逗號分隔文本塊。然後,也許,也許,你可以確定每個文本塊中的目標RegEx,它可以告訴你該子字符串是否屬於該類型。當多種模式匹配時仍然不知道如何處理。

+0

另一個問題這將是一個可能性,但因爲有更多的逗號,我需要正則表達式,例如至少部分「HRB .... 12345波恩」。整個事情就是在這裏看到:https://pastebin.com/cBHHuENL – iDraGoN

+0

已經提到過,地址解析很難。 :) –

相關問題