匹配;ABC12;10;250.3使用regexjava

匹配;ABC12;10;250.3使用regexjava,java,regex,Java,Regex,上述正则表达式可以正常工作 考虑以下字符串 str1=“;ABC12;10;250.3” str2=;ABB62;5.2.3 str3=;ABF02;8.25120.3 str4=;AKC12;11;2504.303 现在我将字符串设置为string stromatch=str1、str2、str3、str4 如何转换上面的正则表达式以匹配上面的字符串 注意:上述字符串中可以有n个逗号分隔的值。我还需要注意字符串strotomatch不以逗号结尾。您可以用圆括号捕获正则表达式并重复一次或多次:

上述正则表达式可以正常工作

考虑以下字符串

str1=“;ABC12;10;250.3”

str2=;ABB62;5.2.3

str3=;ABF02;8.25120.3

str4=;AKC12;11;2504.303

现在我将字符串设置为
string stromatch=str1、str2、str3、str4

如何转换上面的正则表达式以匹配上面的字符串


注意:上述字符串中可以有n个逗号分隔的值。我还需要注意字符串
strotomatch
不以逗号结尾。

您可以用圆括号捕获正则表达式并重复一次或多次:

String regex = "^;[A-Z0-9]{5};[\\d]{1,};[\\d]{1,}.[\\d]{1,}";
String str = ";ABC12;10;250.3";
System.out.println(str.matches(regex));

请尝试以下模式:
(;[A-Z0-9]{5};[\\d]{1,};[\\d]{1,}\\\\\[\\d]{1,},,)+

这与您的模式有两个不同之处:首先,我使用
\\.
表示这必须是
,因为单个点在正则表达式中表示“任何字符”

然后我用分组括号
(…)
和结尾处的
+
来表示:“查找一次或多次”。由于
在末尾是可选的,我添加了一个

如果您想在以后使用匹配器处理单个匹配,只需简单的修改即可:
(;[a-Z0-9]{5};[\\d]{1,};[\\d]{1,}.\\\\.\\\d]{1,}),?

+
不见了,而
,?
在分组括号之外,因为这些括号现在也是捕获括号

例如:

String regex = "^(;[A-Z0-9]{5};\\d+;\\d+\\.\\d+){1,}";
final Pattern=Pattern.compile((;[A-Z0-9]{5};[\\d]{1,};[\\d]{1,};[\\d]{1,}),?”;
最终匹配器Matcher=pattern.Matcher(“;ABC12;10;250.3;ABB62;5;2.3;ABF02;8;25120.3;AKC12;11;2504.303”);
while(matcher.find()){
System.out.println(“整个匹配:+matcher.group());

对于(inti=1;i,我找到了以下解决问题的方法

final Pattern pattern = Pattern.compile("(;[A-Z0-9]{5};[\\d]{1,};[\\d]{1,}\\.[\\d]{1,}),?");
final Matcher matcher = pattern.matcher(";ABC12;10;250.3,;ABB62;5;2.3,;ABF02;8;25120.3,;AKC12;11;2504.303");
while (matcher.find()) {
  System.out.println("Whole match: " + matcher.group());
  for (int i = 1; i <= matcher.groupCount(); ++i) {
    System.out.println("Group #" + i + ": " + matcher.group(i));
  }
}
还有比这更简单的方法吗

String strToMatch = ";ABC12;10;250.3,;ABB62;5;2.3,;ABF02;8;25120.3,;AKC12;11;2504.303";
    if(strToMatch.endsWith(",") || strToMatch.startsWith(","))
        return false;
    else{
        String[] str = strToMatch.split(",");
        int count = 0;
        for (String s : str){
            String regex = ";[A-Z0-9]{5};\\d+;\\d+\\.\\d+";
            if(s.matches(regex))
                return false;
        }
        return true;

    }