Ruby on rails regex从字符串中删除字符

Ruby on rails regex从字符串中删除字符,ruby-on-rails,ruby,regex,Ruby On Rails,Ruby,Regex,我有街道地址,我想用空白字符串替换街道方向 这是我想用空白字符串替换的街道E、W、S、N、NE、NW、SE、SW 我尝试用这个regex/((e | w)|(n | s)(e | w))/I来替换方向,但这将替换regex中存在的所有实例字符 我想转换街道地址如下- "123 Main Street S" => "123 Main Street" "E 123 Main Street" => "123 Main Street" "SE 123 Main Street" => "

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

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

我尝试用这个regex
/((e | w)|(n | s)(e | w))/I
来替换方向,但这将替换regex中存在的所有实例字符

我想转换街道地址如下-

"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"
应该为您做。
\b
单词边界
。请参阅演示

应该为您做。
\b
单词边界
。请参阅演示

这也将删除环绕方向和前面逗号的空白空间。

例如:

这也将删除环绕方向和前面逗号的空白空间。


示例:

以下是我能想到的最好办法:

/[\s,]*\b(?:[EW]|[NS][EW]?)\b/i
正则表达式匹配:

  • [\s,]*
    -零个或多个空格和逗号
  • \b
    -单词边界(前导)
  • (?:[EW]|[NS][EW]?)
    -匹配以下内容的非捕获分组构造:
    • [EW]
      -要么
      E
      要么
      W
    • [NS][EW]?
      -可选地选择
      N
      S
      (因此第一个备选方案中缺少这些),然后是
      E
      W
  • \b
    -尾随词边界
请注意使用字符类(那些
[…]
东西)匹配单个字符是最佳做法,因为它们不会导致回溯(因此最好使用通常与字符序列一起使用的具有替代项的组)


以下是我能想到的最好的:

/[\s,]*\b(?:[EW]|[NS][EW]?)\b/i
正则表达式匹配:

  • [\s,]*
    -零个或多个空格和逗号
  • \b
    -单词边界(前导)
  • (?:[EW]|[NS][EW]?)
    -匹配以下内容的非捕获分组构造:
    • [EW]
      -要么
      E
      要么
      W
    • [NS][EW]?
      -可选地选择
      N
      S
      (因此第一个备选方案中缺少这些),然后是
      E
      W
  • \b
    -尾随词边界
请注意使用字符类(那些
[…]
东西)匹配单个字符是最佳做法,因为它们不会导致回溯(因此最好使用通常与字符序列一起使用的具有替代项的组)


不知道为什么在只查找大写字母时,在带有
i
选项的正则表达式中使用小写字母,而不是直接编写大写字母。正则表达式本身只是一个表达式。它没有任何作用。您还没有明确说明如何使用它。不确定您将如何使用它,但只需将这些字母替换为空白字符串,就可以在方向的两侧留下空格,甚至像您上一个示例中那样留下逗号,我不知道你怎么能只用一个正则表达式,没有人工智能或任何相关数据库来区分方向和非方向字母(如
公寓82E
中的
E
),sawa我已经更新了我的问题。我有一个要求,我想删除街道地址的方向,并保存它不同。用户的输入可以是任何大小写
大写
小写
,因此使用了
i
。不知道为什么在正则表达式中使用小写,而不是在只查找大写字母时直接写大写字母。正则表达式本身只是一个表达式。它没有任何作用。您还没有明确说明如何使用它。不确定您将如何使用它,但只需将这些字母替换为空白字符串,就可以在方向的两侧留下空格,甚至像您上一个示例中那样留下逗号,我不知道你怎么能只用一个正则表达式,没有人工智能或任何相关数据库来区分方向和非方向字母(如
公寓82E
中的
E
),sawa我已经更新了我的问题。我有一个要求,我想删除街道地址的方向,并保存它不同。用户输入可以是任何情况下的
大写
小写
,因此使用
i
/[\s,]*\b(?:[EW]|[NS][EW]?)\b/i
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"