0

一連の住所から通りの名前のみを照合しようとしています。アドレスは次のようになります。

23バレルロード。

14 オールド ミル Dr.

65-345 ハワーズ ブラフ

「Barrel」、「Old Mill」、および「Howard's」に一致する正規表現を使用したいと考えています。最後の単語を除外する方法を理解する必要があります。これまでのところ、数字を除外する後読みがあり、これを使用して単語とスペース、および「'」を含めることができます。

(?<=\d\s)(\w|\s|\')+

最後の単語 (ピリオドで終わる場合とない場合があります) を除外するにはどうすればよいですか? 先読みを使用する必要があると思いますが、それを定式化する方法がわかりません。

4

4 に答える 4

0

欲しいものに合わせてみませんか?私がよく理解している場合は、最後の単語を除く数字の後のすべての単語を取得する必要があります。単語はスペースで区切られているので、数字と最後のスペースの間のすべてを取得してください。

\d+(?:-\d+)? ((?:.)+) 注: 最後にスペースがあります。

\1 N 回であなたが望むものになるでしょう。

正確なテキストと一致させたいだけの場合は、使用できます\K(すべての正規表現エンジンでサポートされているわけではありません)。ただし、例:

正規表現で\d+(?:-\d+)? \K.+(?= )

于 2013-01-31T22:36:49.143 に答える
0

あなたが望む先読みは だと思います(?=\s\w+\.?$)

\s: 最後のスペースを含めたくない \w: 少なくとも 1 つの単語文字 (AZ、az、0-9、または '_') \.?: オプションのピリオド (「St.」などの略語の場合) $: これが最後の言葉

改行の前に追加の空白がある可能性がある場合は、これを に変更して(?=\s\w+\.?\s*$)ください。

于 2013-01-31T22:32:34.770 に答える
0

これには後読みは必要ありません。

/^[-\d]+ ([\w ']+) \w+\.?$/
  • 1 つ以上の数字とハイフンに一致
  • スペース
  • 文字、数字、スペース、アポストロフィをキャプチャ グループ 1 に一致させます
  • スペース
  • 最後の単語とオプションのピリオドに一致

Ruby の実装例:

regex = /^[-\d]+ ([\w ']+) \w+\.?$/

tests = [ "23 Barrel Rd.",  "14 Old Mill Dr.", "65-345 Howard's Bluff" ]

tests.each do |test|
  p test.match(regex)[1]
end

出力:

"Barrel"
"Old Mill"
"Howard's"
于 2013-01-31T22:33:29.420 に答える
0

もう 1 つのオプションはsplit()、ほとんどのスクリプト言語で提供されている関数を使用することです。必要なものの Python バージョンは次のとおりです。

stname = address.split()[1:-1]

(addressこれは元の住所行で、stnameは通りの名前、つまり、抽出しようとしているものです。)

于 2013-01-31T22:44:32.040 に答える