例如,我有一个来自CSV "XX","00° 00' 00,00" n.","00° 00' 00,00" e.","YYY°"
的字符串。
我如何使用正则表达式将此字符串解析为:
"XX"
"00° 00' 00,00" n."
"00° 00' 00,00" e."
"YYY°"
我已经使用了这个正则表达式line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)")
,但事实证明,它解析如下:
"XX"
"00° 00' 00,00" n.,00° 00' 00"
"00" e"
"YYY°"
以下问题: 如何替换 ONLY 第一个和最后一个双引号?它必须如下所示:
XX
00° 00' 00,00" n.
00° 00' 00,00" e.
YYY°
答案 0 :(得分:2)
您可以简单地使用:
String[] result = line.substring(1, line.length() - 1).split("\",\""));
子字符串将删除第一个和最后一个"
字符,然后按","
模式拆分。
答案 1 :(得分:0)
如果你要使用正则表达式,你也可以使用捕获组来获得最终结果。我在RegexPlanet.com上测试了这种模式,它产生了你需要的东西。
Pattern.compile("\"(\\w+)\"\\s*,\\s*\"(\\d+°\\s+\\d+'\\s+\\d+(?:[\\.,]\\d+)(?:''|\")\\s+[nNsS]\\.)\"\\s*,\\s*\"(\\d+°\\s+\\d+'\\s+\\d+(?:[\\,]\\d+)(?:''|\")\\s+[eEwW]\\.)\"\\s*,\\s*\"(\\w+°)\"");
这是WITH字符串转义。在匹配器上致电find
后,您可以按照指定的group(n)
与他们联系。这也假定您在几秒钟内是否发送双引号或两个单引号的一些选项,并且不假设您总是有浮点数,也不会使用哪个分隔符。
当使用不会改变用户数据的常量正则表达式时,将它们作为静态字段中的编译常量通常是个好主意,因为它们的编译会影响性能。
如果这看起来很可怕,你应该使用像RegexPlanet这样的在线工具更多地练习你的模式,并且只是玩它们来尝试不同的东西。