尝试创建一个可以处理输入的正则表达式:
我有这个:
^(.+)[,\\s]+(.+)\s+(\d{5})?$
它适用于#2案例,但不适用于#1。如果我将\s+
更改为\s*
,那么它适用于#1但不适用于#2。
您可以在此处使用它:http://rubular.com/r/oqKBJ4r8cq
答案 0 :(得分:6)
请改为尝试:
^([^,]+),\s([A-Z]{2})(?:\s(\d{5}))?$
此表达式适用于这两个示例,在不同的组中捕获每个地址,并正确处理空格。
以下是它如何分解:
^ # anchor to the start of the string
([^,]+) # match everything except a comma one or more times
, # match the comma itself
\s # match a single whitespace character
([A-Z]{2}) # now match a two letter state code
(?: # create a non-capture group
\s # match a single whitespace character
(\d{5}) # match a 5 digit number
)? # this whole group is optional
$ # anchor to the end of the string
答案 1 :(得分:6)
答案 2 :(得分:0)
["Beverly Hills, CA 90210", "Beverly Hills, CA"].each do |s|
m = s.match(/^([^,]*),\s*(\w*)\s*(\d*)?$/)
$1 # => "Beverly Hills", "Beverly Hills"
$2 # => "CA", "CA"
$3 # => "90210", ""
end
#=>注释显示两次运行的结果。
答案 3 :(得分:0)
((?:\w|\s)+),\s(AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY)
这是一个只抓取有效state codes的长篇文章。