-2

有没有办法从字符串中提取城市名称?例如:

"I'm going to New York then to Berlin"
# => ["New York", "Berlin"]
4

2 回答 2

2

您需要一个城市名称列表,这可能是一个巨大的列表,具有多种拼写变体和许多重复项。

一旦你有了你想要的列表,这将返回一个可用的正则表达式,你可以使用它来扫描字符串,返回列表中的城市:

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"
]
于 2012-10-08T14:04:17.923 回答
2

你可以这样做:

regex = /New York|Berlin|Amsterdam|Tokyo|Paris|London/
"I'm going to New York then to Berlin".scan(regex) #=> ["New York", "Berlin"]

如果这不是您的意思,请改进您的问题。

于 2012-10-08T12:03:41.933 回答