正则表达式,地理坐标系值(秒),Java的麻烦

时间:2016-01-15 10:50:21

标签: java regex

例如,我有一个来自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°

2 个答案:

答案 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这样的在线工具更多地练习你的模式,并且只是玩它们来尝试不同的东西。