【问题标题】:Remove Spaces and Special Characters (between Numbers only) in a string删除字符串中的空格和特殊字符(仅限数字之间)
【发布时间】:2020-07-29 17:20:12
【问题描述】:

我是 RegEx 的新手。我正在尝试去除字符串中数字之间的所有空格和特殊字符。请注意,该字符串可能包含其他带有数字的字符。 例如取这个字符串,

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);

它的输出为 ThisisSampleAmericanExpCardNumber340000000000009, 所需的输出是“This is Sample AmericanExp Card Number 340010002000009”。 感谢帮助,请告诉我它背后的概念。

编辑:- 现在我要屏蔽卡号及其引脚(PCI),所以我有这个公式

^((4\\d{3})|(5[1-5]\\d{2})|(6011))-?\\d{4}-?\\d{4}-?\\d{4}|3[4,7]\\d{13}$

检查某些类型的信用卡。我正在修改它以检查其 PIN 和 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 位数字)。

【问题讨论】:

  • 嘿!必须是正则表达式吗?
  • 不幸的是,但是有没有其他方法?
  • 您的编辑似乎与原始问题无关。此外,regex you posted 与您的示例字符串不匹配
  • 我认为您的编辑是一个新问题,请考虑发布一个新问题,并提供更多详细信息,因为您写的内容不清楚。

标签: java regex replaceall


【解决方案1】:

你可以使用

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

或者,如果您需要处理 Unicode 字符串:

.replaceAll("(?U)(?<=[0-9])[\\W_]+(?=[0-9])", "")

请参阅regex。详情:

  • (?&lt;=\d) - 一个正向的后视,匹配紧接在数字前面的位置
  • [\W_]+ - 一个或多个非单词或下划线字符
  • (?=\d) - 与紧跟数字的位置匹配的正向前瞻。

请注意,(?U)Pattern.UNICODE_CHARACTER_CLASS 嵌入选项将使 \W 识别 Unicode,并且不再匹配西里尔字母等。

Java demo

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

【讨论】:

  • 它就像魅力一样。说如果我想在 [\W_]+ 之间为任何特定数字添加任何或条件,我应该如何实现这一点? (假设我想检查 String 是否包含 [53])
  • @AnandSharma 我不明白。只需使用String#containsif (s1.contains("[53]")) {...}
  • 只是在这个 .replaceAll("(?U)(?
  • @AnandSharma 不,在一般情况下,它不起作用。检查字符串是否包含[53],如上所示,然后做任何你需要的事情。如果您有特定的字符串格式,请告知,分享示例字符串和预期输出。
猜你喜欢
  • 2021-04-23
  • 2021-10-16
  • 2014-08-17
  • 2015-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 2014-07-20
相关资源
最近更新 更多