ruby-on-rails - 正则表达式从字符串中删除字符

标签 ruby-on-rails ruby regex

我有街道地址,我想用空白字符串替换街道方向。

这是街道 E, W, S, N, NE, NW, SE, SW 我想用空白字符串替换它

我已经尝试用这个正则表达式 /((e|w)|(n|s)(e|w)?)/i 来替换方向,但这替换了所有存在的实例字符在正则表达式中。

我想像下面这样转换街道地址 -

"123 Main Street S" => "123 Main Street"
"E 123 Main Street" => "123 Main Street"
"SE 123 Main Street" => "123 Main Street"
"123 Main Street, SW, US" => "123 Main Street, US"
"123 Main Street, s, USA" => "123 Main Street, USA"

最佳答案

这是我能想到的最好的:

/[\s,]*\b(?:[EW]|[NS][EW]?)\b/i

正则表达式匹配:

  • [\s,]* - 零个或多个空格和逗号
  • \b - 字边界(前导)
  • (?:[EW]|[NS][EW]?) - 匹配的非捕获分组结构:
    • [EW] - EW
    • [NS][EW]? - NS 可选(因此这些在第一个选项)后跟 EW
  • \b - 尾随单词边界

注意 使用字符类(那些 [...] 东西)来匹配单个字符是最佳实践,因为它们不会导致回溯(因此是首选使用通常与字符序列一起使用的替代项进行分组。

参见 IDEONE demo

rx = /[\s,]*\b(?:[EW]|[NS][EW]?)\b/i
puts "123 Main Street S".sub(rx, '').strip  # => "123 Main Street"
puts "E 123 Main Street".sub(rx, '').strip  # => "123 Main Street"
puts "SE 123 Main Street".sub(rx, '').strip # => "123 Main Street"
puts "123 Main Street, SW, US".sub(rx, '').strip # => "123 Main Street, US"

关于ruby-on-rails - 正则表达式从字符串中删除字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34775017/

相关文章:

ruby-on-rails - Rails-ShareTribe。 npm 安装错误(ubuntu 16.04)

ruby - (Mac) 当语法设置为 Ruby 时 Vim 相当慢

ruby - Ruby 是否有 nil 值的安全导航运算符的语法,就像在 Groovy 中一样?

ruby - 您如何创建预发布 gem ?

c# - 避免在 @ 符号后连字符

sql - 使用 ActiveRecord 为多对多查询设置条件

ruby-on-rails - 与 rails 中的模块和型号名称混淆

regex - 用于域匹配的嵌套正则表达式

regex - 在我的 init.el 文件中避免来自 elpa 的版本号

mysql - 表 'project_dev.users' 不存在