2010-06-22 114 views
0

如何从这个去:帮助,正则表达式

"01","35004","AL","ACMAR",86.51557,33.584132,6055,0.001499 

这样:

ACMAR, AL 
+0

能否请您解释一下什么你想干什么?我无法完全根据你的例子弄清楚它。 – 2010-06-22 00:44:40

+0

你的正则表达式在哪里?这些是什么?字符串?字符串和数字列表? – 2010-06-22 00:45:40

+2

是什么让你相信正则表达式是解决这个问题最合适的方法? – 2010-06-22 00:45:59

回答

1

我不太清楚为什么你要解析一个CSV与Regexp,而不是一个CSV文件解析器。它使你的生活所以容易得多:

require 'csv' 

CSV.open('/path/to/output.csv', 'wt') do |csv| 
    CSV.foreach('/path/to/output.csv') do |_, _, state, city| 
    csv << [state, city] 
    end 
end 
1

如果它是一个数组 - […].grep(/^[A-Z]+$/),如果串 - "…".scan(/[A-Z]+/)

0

匹配:\” ([A-Za-z]。*)\“。* \”([A-Za-z]。*)\“

替换:\ 2,\ 1

这里假定只有字母的字段是那两个。更好的解决方案可能是爆炸','并采取第3和第4个字符串。

+0

我该如何运行? (“A-Za-z”。*)\“。* \”([A-Za-z]。*)\“。match(”01“,”35004“,”AL“,”ACMAR “,86.51557,33.584132,6055,0.001499) 这是不对的。 – mer 2010-06-22 02:56:48

+0

使用字符串子函数,如下所示:localString.sub(/ \“([A-Za-z]。*)\”。* \“([A-Za-z]。*)\”/ “\ 2,\ 1”); – 2010-06-22 13:08:53

0

您可以使用此

"(.+)","(.+)","(.+)","(.+)", 

,然后拼接捕获组3和2