2017-06-22 19 views
0

我目前正在使用一個工具來獲取位置名稱和值(I到VI)在字符串的末尾。在正則表達式IAM中絕對是初學者,面臨一些麻煩。正則表達式獲得不同的格式的位置名稱和值

我目前的嘗試:

^[A-Za-züäöÜÄÖ()-]*.(?!I)(?!V)[A-Za-züäöÜÄÖ.]*.(?!I)(?!V)[A-Za-züäöÜÄÖ.)]*.(?!I)(?!V)[A-Za-zü.äöÜÄÖ)ß.-]* 

例字符串值和預期值:

"Apolda II" -> "Apolda", "II" 
"Bad Isen II" -> "Bad Isen" "II" 
"Hude (Oldenburg) II" -> "Hude (Oldenburg)" "II" 
"Saale-Holzland-Kreis II" -> "Saale-Holzland-Kreis" "II" 
"Brandenburg a. d. Havel I" -> "Brandenburg a. d. Havel" "I" 
"Bad Lauterberg im Harz I" -> "Bad Lauerberg im Harz" "I" 

我真的在得到所有這些情況檢查絆倒。我真的很感激任何形式的幫助:)。

+0

也許你可以使用['Regex.Split(S,@ 「\ S +(?= [XILCDM] + $)」)'](http://regexstorm.net/tester?p=% 5CS%2B%28%3F%3D%5bXILCDM%5D%2B%24%29&I =阿波爾達+ II&O = m)個 –

回答

0

除非你必須使用正則表達式,我建議simplier解決方案:

比方說,你有串myStr = "Apolda II";

由於數字始終是最後一個「單詞」,只是將整個字符串與空格拆分爲分隔符: string[] strTable = myStr.Split(' ');。然後您的期望結果是(n = strTable.Length):位置= strTable[1] + ... + strTable[n - 1]和值= strTable[n]

0

你可以保持它的簡單,因爲你知道它應該是我 - 六月底(?羅馬數字,右)就可以使羅馬數字

之前的正則表達式期待一切
^(.*)\s+(I{1,3}|IV|V|VI)$ 

你必須處理這個作爲多線雖然。

new System.Text.RegularExpressions.Regex(
    @"^(.*)\s+(I{1,3}|IV|V|VI)$",   
    System.Text.RegularExpressions.RegexOptions.Multiline 
).Matches("Apolda II\nBad Isen II")