5

過去数時間、次のサンプル データから住所を照合しようとしましたが、うまくいきません。

medicalHistory      None
address             24 Lewin Street, KUBURA, 
                NSW, Australia
email               MaryBeor@spambob.com


address             16 Yarra Street, 
                                     LAWRENCE, VIC, Australia
name                Mary   Beor
medicalHistory      None
phone               00000000000000000000353336907
birthday            26-11-1972

私の計画は、「アドレス」で始まり、その後にスペースが続き、その後に文字、数字のカンマ、改行が続き、改行とその後に文字が続くものを見つけることでした。私は次の(そしてそれの多くのバリエーション)を思いつきました:

address\s+([0-9a-zA-Z, \n\t]+)(?!\n\w)

残念ながら、それは次のものと一致します。

address             24 Lewin Street, KUBURA,
                NSW, Australia
email               MaryBeor  

address             16 Yarra Street,
                                 LAWRENCE, VIC, Australia
name                Mary   Beor
medicalHistory      None
phone               00000000000000000000353336907
birthday            26

それ以外の

address             24 Lewin Street, KUBURA, 
                NSW, Australia

address             16 Yarra Street,
                                 LAWRENCE, VIC, Australia

私が間違っていることを教えてください。

4

2 に答える 2

5

私はこのようにします:

address\s+((?![\r\n]+\w)[0-9a-zA-Z, \r\n\t])+

こちらの Regexrを参照してください。

これ((?![\r\n]+\w)[0-9a-zA-Z, \r\n\t])+は重要な部分です。つまり、 の次の文字が一致しない[0-9a-zA-Z, \r\n\t]場合(?![\r\n]+\w)は、 の次の文字に一致します。これはあなたが期待するものと一致しています。

どちらの場合も、文字クラスに含まれていない文字が原因で正規表現が一致しなくなりました。そのようにしたい場合は、遅延量指定子正の先読みを組み合わせる必要があります。

address\s+([0-9a-zA-Z, \n\r\t]+?)(?=\r\w)

[0-9a-zA-Z, \n\r\t]+?(?=\r\w)条件が trueになるまで、可能な限りマッチングを減らします。

こちらのRegexrでご覧ください

于 2013-09-24T11:23:38.800 に答える