2012-01-22 9 views
1

別のテキストでアドレスを検索しようとしています。これは単語の後に日付がマッチすることを除いて全くうまくいく(foobar 22.01.2012 => address:foobar 22) だから私はstreetnumberの後に続けてはいけない正規表現を改善したいと思う。 |:)\ D」RegExが次のグループに一致しません。 d

これは私が持っているものです。

(?<str>\b([a-zA-Z]+-*[a-zA-Z]+(-|\s)*([a-zA-Z]|-)+)\b\.?\s{1})(?<no>\d+(\s?[a-zA-Z])?\b) 

代表テキスト:

相談時間
月曜日、06.02。金曜日まで、10.02.212および
月曜日、13.02。火曜日まで、14.02.2012、
各14.00-15.30時、2階、
Am Fasanengarten 12 foobar
Schlossstr。 34

何が見つかるはずですか?
Am Fasanengarten 12
Schlossstr。 34

何が見つかりましたか?
各14
アムFasanengarten 12
foobarに//理由は一致していますか?番号なし?
Schlossstr。 34

私は異なるポジティブ/ネガティブなルック・バック・イン・アヘッドを試しましたが、運がありませんでした。

+0

" Am Fasanengarten 12 Scholossstr。 34 "とすると、アルファベット文字、数字、ピリオドで構成された単語がスペースで区切られていますが、これはテキスト全体にも当てはまります。 - あなたは正規表現を書こうと思ったときに、あなたがマッチさせたいものと正確に何を一致させたいのかを明確にする必要があります。 –

答えて

1

全く存在しないことを、最後の分確保でそれhere on Regexr

否定先読み(?![.:]\d)を参照してくださいここで

(?<str>\b(?:[a-zA-Z]+-*[a-zA-Z]+(?:[ \t-])*(?:[a-zA-Z]|-)+)\b\.?\s)(?<no>\d+(?:\s?[a-zA-Z])?\b)(?![.:]\d) 

これを試してみてください "と。" 「:」の後には\dが続きます。

foobar //これはなぜ一致しますか?番号なし?
Schlossstr。あなたは私が[ \t-]と私の解決策でこれを置き換えstreetname

(?<str>\b([a-zA-Z]+-*[a-zA-Z]+(-|\s)*([a-zA-Z]|-)+)\b\.?\s{1})(?<no>\d+(\s?[a-zA-Z])?\b) 
           ^^ here 

の単語間の\sを可能にするので

この34試合で、これが唯一のスペース、タブとハイフンを可能にします。

\sは "白い空白"で、これには改行文字も含まれています。これはfoobarに一致しているため、グループを見ると "foobar Schlossstr"というアドレスに一致します。34 "

+0

ありがとうございますロット、ステマ!それは今完璧に見える!:) – user1163680

関連する問題