Java 删除字符串中的空格和特殊字符(仅限数字之间)

Java 删除字符串中的空格和特殊字符(仅限数字之间),java,regex,replaceall,Java,Regex,Replaceall,我是正则表达式的新手。我试图去除字符串中数字之间的所有空格和特殊字符。请注意,字符串可能包含其他带数字的字符。 比如这个字符串 String s1 = "This is Sample AmericanExp Card Number 3400 1000 2000 009"; 我尝试的是:- String s1 = "This is Sample AmericanExp Card Number 3400 1000 2000 009"; String regExp = "[^\\w]+"; Stri

我是正则表达式的新手。我试图去除字符串中数字之间的所有空格和特殊字符。请注意,字符串可能包含其他带数字的字符。 比如这个字符串

String s1 = "This is Sample AmericanExp Card Number 3400 1000 2000 009";
我尝试的是:-

String s1 = "This is Sample AmericanExp Card Number 3400 1000 2000 009";
String regExp = "[^\\w]+";
String replacement = "";
String changed= s1.replaceAll(regExp, replacement);
System..out.println("changed->"+content);
它的给定输出为以下示例美国ExpCardNumber 3400000000009, 所需输出为“这是样本AmericanExp卡号3400002000009”。 感谢您的帮助,请让我知道背后的概念

编辑:- 现在我屏蔽了卡号和它的Pin码(PCI),所以我有了这个公式

^((4\\d{3})|(5[1-5]\\d{2})|(6011))-?\\d{4}-?\\d{4}-?\\d{4}|3[4,7]\\d{13}$
检查某种类型的信用卡。我正在修改它,以检查其引脚和CVV也。(匹配4和6位数字也) 示例字符串=“示例AmericanExp卡号3400 1000 2000 009,PIN码为1234,CVV=654321”

我将公式修改为:

^((4\\d{3})|(5[1-5]\\d{2})|(6011))-?\\d{4}-?\\d{4}-?\\d{4}|3[47]\\d{13}$|^[0-9]{4}$|^[0-9]{6}$
这并没有给我正确的输出(也匹配4位和6位数字)

您可以使用

.replaceAll("(?<=\\d)[\\W_]+(?=\\d)", "")

嘿它必须是正则表达式吗?很遗憾,是的,但是还有其他方法吗?您的编辑似乎与原始问题无关。另外,与你的样本不匹配的是,你的编辑是一个新的问题,请考虑发布一个新的,有更多的细节,因为你所写的是不清楚的。比如说,如果我想在这两者之间添加任何或条件,比如使用[\W_]+添加任何特定数字,我应该如何实现这一点?(假设我想检查字符串是否包含[53])@AnandSharma我不明白。只需使用
String#contains
if(s1.contains(“[53]”){…}
就可以了。replaceAll((?U)(?@AnandSharma不,一般情况下,它不会工作。检查String是否包含
[53]
如上所述,然后根据需要执行任何操作。如果您有特定的字符串格式,请告知,共享示例字符串和预期输出。
.replaceAll("(?U)(?<=[0-9])[\\W_]+(?=[0-9])", "")
String s1 = "This is Sample AmericanExp Card Number 3400 1000 2000 009";
System.out.println("changed -> " + s1.replaceAll("(?<=\\d)[\\W_]+(?=\\d)", ""));
// => changed -> This is Sample AmericanExp Card Number 340010002000009