2017-06-22 6 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=% 5%%2b%28%3f%3d%5bXILCDM%5d%2b%24%29&i = Apolda + II&o = m) –

答えて

0

あなたは正規表現を使用しなければならない場合を除き、私はsimplierソリューションを提案します:

は、あなたが文字列 myStr = "Apolda II";を持っているとしましょう。

数字は常に最後の「単語」なので、区切り文字としてスペース全体を分割するだけです: string[] strTable = myStr.Split(' ');。次に、希望の結果は(n = strTable.Length)です:場所= strTable[1] + ... + strTable[n - 1]と値= strTable[n]

0

あなたが知っているので、それは私である必要があり、それをシンプルに保つこと - (?右、ローマン番号)最後にVIあなたはローマ数字の前にすべてのものを期待して正規表現を作ることができ

^(.*)\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") 
関連する問題