有没有办法从字符串中提取城市名称?例如:
"I'm going to New York then to Berlin"
# => ["New York", "Berlin"]
有没有办法从字符串中提取城市名称?例如:
"I'm going to New York then to Berlin"
# => ["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"
]
你可以这样做:
regex = /New York|Berlin|Amsterdam|Tokyo|Paris|London/
"I'm going to New York then to Berlin".scan(regex) #=> ["New York", "Berlin"]
如果这不是您的意思,请改进您的问题。