gpt4 book ai didi

Java 使用正则表达式验证和分割数字和符号

转载 作者:行者123 更新时间:2023-11-30 02:20:27 25 4
gpt4 key购买 nike

我正在尝试验证一个字符串,它必须具有正确顺序的特定模式,并进一步将它们分成组。

我的预期格式是 \60########\60000000 其中

  1. 必须仅以一个“\”开头
  2. 后跟一位或多位数字(以 60 为例,可以是任意数字)
  3. 后跟零个或多个“#”
  4. 后面没有别的

可能的匹配就像

  1. \60000000000
  2. \60###
  3. \60############
  4. \58342##

所以我编译了下面的正则表达式来尝试验证,并进一步将其分成组(预计 2 组(不带 #)或 3 组(带 #)):

模式 numPattern = Pattern.compile("(\\\\{1})|([0-9]+)|(#*)");

我正在尝试检测 1 x\、1 个或多个 0 到 9、任意数量的 #。

和单元测试:

private static void digest(String formatTxt) {
System.out.println("Doing: " + formatTxt);
Pattern numPattern = Pattern.compile("(\\\\{1})|([0-9]+)|(#*)");

if (numPattern.matcher(formatTxt).find()) {
System.out.println("Pattern matched!");
}

int i = 0;
Matcher matcher = numPattern.matcher(formatTxt);

while (matcher.find()) {
i++;
String data = matcher.group();
System.out.println(i + ". " + data);
}

System.out.println("");
}

public static void main(String[] args) {
digest("\\60000000000");
digest("\\6000000000000");
digest("\\60#########");
digest("\\60############");
digest("\\60############6");
digest("\\60########A####");
digest("\\lala60000000000");
digest("\\60#####6######");
digest("\\60#####6##A####");
}

结果:

// Doing: \60000000000
// Pattern matched!
// 1. \
// 2. 60000000000
// 3.
// Comment: OK but not sure why is there third element
//
// Doing: \6000000000000
// Pattern matched!
// 1. \
// 2. 6000000000000
// 3.
// Comment: OK but not sure why is there third element
//
// Doing: \60#########
// Pattern matched!
// 1. \
// 2. 60
// 3. #########
// 4.
// Comment: OK but not sure why is there forth element
//
// Doing: \60############
// Pattern matched!
// 1. \
// 2. 60
// 3. ############
// 4.
// Comment: OK but not sure why is there forth element
//
// Doing: \60############6
// Pattern matched!
// 1. \
// 2. 60
// 3. ############
// 4. 6
// 5.
// Comment: Not OK because I do not want anything behind #
//
// Doing: \60########A####
// Pattern matched!
// 1. \
// 2. 60
// 3. ########
// 4.
// 5. ####
// 6.
// Comment: Not OK because I do not want anything behind first group of #
//
// Doing: \lala60000000000
// Pattern matched!
// 1. \
// 2.
// 3.
// 4.
// 5.
// 6. 60000000000
// 7.
// Comment: Not OK because \\ must be followed by digits
//
// Doing: \60#####6######
// Pattern matched!
// 1. \
// 2. 60
// 3. #####
// 4. 6
// 5. ######
// 6.
// Comment: Not OK because I do not want anything behind first group of #
//
// Doing: \60#####6##A####
// Pattern matched!
// 1. \
// 2. 60
// 3. #####
// 4. 6
// 5. ##
// 6.
// 7. ####
// 8.
// Comment: Not OK because I do not want anything behind first group of #

如果有人能指导我,我需要在正则表达式中更改哪些内容才能实现上述要求,我将不胜感激?

最佳答案

您可以使用以下正则表达式:

^(\\)(\d+)(#*)$

请参阅regex demo

在 Java 中,您可以将 String rx = "(\\\\)(\\d+)(#*)"Matcher.matches 结合使用。

详细信息

  • ^ - 字符串开头(隐式在 matches() 中)
  • (\\) - 第 1 组:单个反斜杠
  • (\d+) - 第 2 组:一位或多位数字
  • (#*) - 第 3 组:0+ # 个字符
  • $ - 字符串结尾(在 matches() 中隐含)。

已修复 Java demo code :

private static void digest(String formatTxt) {
System.out.println("Doing: " + formatTxt);
Pattern numPattern = Pattern.compile("(\\\\)(\\d+)(#*)");
Matcher m = numPattern.matcher(formatTxt);
if (m.matches()) {
System.out.println("Pattern matched!");
System.out.println("1. " + m.group(1));
System.out.println("2. " + m.group(2));
System.out.println("3. " + m.group(3));
System.out.println("");
}
}

关于Java 使用正则表达式验证和分割数字和符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47011927/

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