2017-03-06 62 views
0

如何用替换函数替换奇数位置处的逗号与空格的出现?所以我想在1,3,7,9更换逗号......是......空间用空格替换奇数号逗号字符

字符串文本= [[[13,68],[134681],[13,6],[ 17,68],[13,68],[13,681],[135,68],[136,68],[13,68]]]

谢谢您的时间。

输出字符串应该像下面这样:我可以使用替换功能两次,以取代“[”和“]”,但我不明白我怎么能删除使用的“Java”

逗号奇数次发生
13 68, 134 681,13 6, 17 68, 13 68, 13 681, 135 68, 136 68, 13 68 

更新1与正则表达式:以下数据具有X和Y坐标为SQL服务器的几何数据类型。

文本= [[[148607.181567725,6818657.60249623],[147539.268528918,6817188.04749019],[144563.526399356,6817136.65513745],[144921.154209564,6818629.77966401],[146841.517476705,6819929.72166114],[148012.482915056,6819763.28604383],[148607.181567725,6818657.60249623]] ]

输出:[[[148607.181567725 6818657.60249623 147539.268528918 6817188.04749019 144563.526399356 6817136.65513745 144921.154209564 6818629.77966401 146841.517476705 6819929.72166114 148012.482915056 6819763.28604383 148607.181567725 6818657.60249623]]]

+1

到目前为止你做了什么? – Maverick

+0

你可以替换],用东西,然后替换其余的逗号,然后替换回],或使用正则表达式来替换逗号,但不能],或拆分字符串以分隔[不管]块和重建与不同的分隔符。目前还不清楚什么是输入 – Akceptor

+0

结果应该如何? –

回答

3

可以使用该正则表达式,并使用$1 $2作为替代捕获数字

\\[*(\\d+)\\W*,\\W*(\\d+)\\]*

\\[*:零个或多个的[

(\\d+):捕获后来用作替换$1一个或多个数字

\\W*,:零个或多个非单词字符和,

(\\d+):替换为$2秒捕获组

\\]*:零个或多个的]

String s = "[[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]"; 
    String pattern = "\\[*(\\d+)\\W*,\\W*(\\d+)\\]*"; 
    System.out.println(s.replaceAll(pattern, "$1 $2")); 

输出:

13 68, 134 681, 13 6, 17 68, 13 68, 13 681, 135 68, 136 68, 13 68 

更新:对于无符号十进制数你可以使用

\\[*(\\d*\\.?\\d+)\\D*,\\D*(\\d*\\.?\\d+)\\]*

演示

const regex = /\[*(\d*\.?\d+)\D*,\D*(\d*\.?\d+)\]*/g; 
 

 
const str = `[[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]`; 
 

 
const str2 = `[[[148607.181567725, 6818657.60249623], [147539.268528918, 6817188.04749019], [144563.526399356, 6817136.65513745], [144921.154209564, 6818629.77966401], [146841.517476705, 6819929.72166114], [148012.482915056, 6819763.28604383], [148607.181567725, 6818657.60249623]]]`; 
 

 
const subst = `$1 $2`; 
 
const result = str.replace(regex, subst); 
 
const result2 = str2.replace(regex, subst); 
 
console.log(result); 
 
console.log(result2);

注:符号值

[[[-148607.181567725, -6818657.60249623], [-147539.268528918, -6817188.04749019],

使用\\[*(-?\\d*\\.?\\d+)\\D*,[^-\\d]*(-?\\d*\\.?\\d+)\\]*

+0

谢谢:我在一个接受java代码的groovy编译器上运行此代码,但我收到以下错误“美元符号后非法字符串正文字符 解决方案:字面美元符号“\ $ 5”或括号中的值表达式“ – user3384231

+0

我正在寻找Groovy语法来替换像'$ 1 $ 2'这样的文字,它在java和演示(JS)中非常完美,当我完成时我会更新它 –

+0

@ user3384231尝试使用's.replaceAll(pattern,“\ $ 1 \ $ 2”));' –

0

替换逗号在奇数位置上出现空格

这听起来像你真正需要的是用括号替换逗号。如果是这样,那么如何使用正则表达式来查找这些字符?

String s = "[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]"; 
System.out.println(s.replaceAll("\\][ ,]+\\[", "] [")); 

输出:

[[13, 68] [134**,** 681] [13**,** 6] [17, 68] [13, 68] [13, 681] [135, 68] [136, 68] [13, 68]]] 

编辑:

我已经删除了错误的逗号,这里是一个更新版本:

String s = "[[13, 68], [134**,** 681], [13**,** 6], [17, 68], [13, 68], [13, 681], [135, 68], [136, 68], [13, 68]]]"; 
System.out.println(s.replaceAll("\\[([^,]+)[ ,]+([^,]+)\\]", "[$1 $2]")); 

输出:

[[13 68], [134** ** 681], [13** ** 6], [17 68], [13 68], [13 681], [135 68], [136 68], [13 68]]] 
+0

例如,我想用空格替换13和68之间的逗号,并在我更新的问题中看到输出 – user3384231

+0

13 68,134 681,13 6,17 68,13 68,13 681,135 68,136 68, 13 68 – user3384231

+0

@ user3384231 oops,我替换了错误的逗号。我会编辑答案。 – Malt

相关问题