gpt4 book ai didi

java - 如何使用java与正则表达式比较时删除不匹配的数据

转载 作者:行者123 更新时间:2023-12-01 15:04:16 25 4
gpt4 key购买 nike

希望做得好..我试图在使用 java 与正则表达式进行比较时删除不匹配的数据。而我的要求是这样的。我的正则表达式是:

([A-Z]{5}[0-9]{4}[A-Z])(XM|XD|EM|ED)([0-9]{3})(_PRA_)([0-9]{3})

它应该接受这样的字符串:

SHIVA1234AXM123_PRA_123

但是在这种情况下,如果我给出任何东西aaSHIVA1234AXM123_PRA_123aa(或)SHIVA1234AXccccM123_PRA_123,就像这个方法应该给出aaaa(或)cccc 像这样。我尝试过以下代码:

public class ExpressionDemo {
public static void main(String[] args) {
String regex = "([A-Z]{5}[0-9]{4}[A-Z])(XM|XD|EM|ED)([0-9]{3})(_PRA_)([0-9]{3})";
Pattern p = Pattern.compile(regex);

String str="SHIVA1234AXM123_PRA_123";
Matcher m = p.matcher(str);
System.out.println(m.groupCount());

for(int i=1;i<=m.groupCount();i++)
{
int start=0;
int end=0;
System.out.println("count "+i);
if(m.lookingAt())
{
System.out.println(m.group(i));
System.out.println("start of group"+m.start(i));
System.out.println("end of group"+m.end(i));
start=m.start(i);
end=m.end(i);
m.reset();
}
else
{
System.out.println("ELSE");
System.out.println(start);
System.out.println(end);
}
}
}
}

这是针对正面案例,但我需要针对虚假案例。它对于任何表达式都应该是通用的--->字符串。

最佳答案

因此,在“负面情况”下,您有一个连续的字符串(字符之间没有空格)可能会被另一个字符串“中断”,并且您想要匹配该“中断”字符串,对吗?

我认为实现此目的的唯一方法是捕获每个“有效”字符之间的所有连续非空白字符。这会非常非常难看:

(\S*?)[A-Z](\S*?)[A-Z](\S*?)[A-Z](\S*?)[A-Z](\S*?)[A-Z](\S*?)[0-9](\S*?)[0-9](\S*?)[0-9](\S*?)[0-9](\S*?)[A-Z](\S*?)(?:X|E)(\S*?)(?:M|D)(\S*?)[0-9](\S*?)[0-9](\S*?)[0-9](\S*?)_(\S*?)P(\S*?)R(\S*?)A(\S*?)_(\S*?)[0-9](\S*?)[0-9](\S*?)[0-9](\S*)
^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^

如果我没数的话,这里有 24 个捕获组。将它们全部连接起来!

编辑

顺便说一句,您可以使用 \d 代替 [0-9] 来保存几个字符:

(\S*?)[A-Z](\S*?)[A-Z](\S*?)[A-Z](\S*?)[A-Z](\S*?)[A-Z](\S*?)\d(\S*?)\d(\S*?)\d(\S*?)\d(\S*?)[A-Z](\S*?)(?:X|E)(\S*?)(?:M|D)(\S*?)\d(\S*?)\d(\S*?)\d(\S*?)_(\S*?)P(\S*?)R(\S*?)A(\S*?)_(\S*?)\d(\S*?)\d(\S*?)\d(\S*)
^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^

关于java - 如何使用java与正则表达式比较时删除不匹配的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13191038/

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