文字列から都市名を抽出する方法はありますか?例えば:
"I'm going to New York then to Berlin"
# => ["New York", "Berlin"]
文字列から都市名を抽出する方法はありますか?例えば:
"I'm going to New York then to Berlin"
# => ["New York", "Berlin"]
あなたはこれを行うことができます:
regex = /New York|Berlin|Amsterdam|Tokyo|Paris|London/
"I'm going to New York then to Berlin".scan(regex) #=> ["New York", "Berlin"]
これが意図したものでない場合は、質問を改善してください。
都市名のリストが必要です。これは膨大なリストになる可能性があり、複数のスペルのバリエーションと多くの重複があります。
必要なリストを取得すると、文字列をスキャンするために使用できる使用可能な正規表現が返され、リストで見つかった都市が返されます。
cities = [
'Albuquerque',
'Alexandria',
'Jackson',
'Ammansland',
'Darby',
'Atkins Bank',
'Kingston',
'Kinston',
'Caswell',
'Kinston',
'Awiehawken',
'Weehawken',
'Bergen',
'Jersey City',
'Berlin',
'Marne',
'Beverwijck',
'Albany',
'Breuckelen',
'Brooklyn',
'New York',
'Campbellton',
'Cross Creek',
'Fayetteville',
'Chamassungh',
'Finlandia',
'Marcus Hook',
'Charleston',
'St. Charles',
].uniq(&:downcase).sort_by(&:downcase)
regex = /\b#{ Regexp.union(cities) }\b/i
構築された正規表現は次のようになります。
puts regex.source
# => \b(?-mix:Albany|Albuquerque|Alexandria|Ammansland|Atkins\ Bank|Awiehawken|Bergen|Berlin|Beverwijck|Breuckelen|Brooklyn|Campbellton|Caswell|Chamassungh|Charleston|Cross\ Creek|Darby|Fayetteville|Finlandia|Jackson|Jersey\ City|Kingston|Kinston|Marcus\ Hook|Marne|St\.\ Charles|Weehawken)\b
正規表現を定義した後、次のようなことができます。
"I'm going to New York then to Berlin".scan(regex)
これは次を返します:
# => [
[0] "New York",
[1] "Berlin"
]