gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:43:08 24 4
gpt4 key购买 nike

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

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 位数字)。

最佳答案

您可以使用

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

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

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

请参阅regex 。详情:

  • (?<=\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

关于java - 删除字符串中的空格和特殊字符(仅限数字之间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61250746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com