2016-01-13 159 views
1

我有街道地址,我想用空白字符串替换街道的方向。正则表达式从字符串中删除字符

这是我想用空字符串

我已经试过这正则表达式/((e|w)|(n|s)(e|w)?)/i更换方向,以取代街头E, W, S, N, NE, NW, SE, SW,但这种替换所有实例的字符出现在正则表达式。

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

"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" 
+1

不知道为什么你使用的是较低的情况下,在正则表达式与'i'选项,而不是直接写大写字母,当你只是在寻找大写字母。 – sawa

+0

正则表达式本身就是一个表达式。它什么都不做。你还没有明确说明你将如何使用它。 – sawa

+0

不知道你要用它做什么,但只需用空白字符串替换这些字母就可以在指令所在的位置的任一侧留出空格,此外,甚至可以在最后一个例子中使用逗号,也不会给你想要的结果。 – sawa

回答

3

这是我能想出的最好的:

/[\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"