java替换正则表达式中的first

8mmmxcuj  于 2021-06-29  发布在  Java
关注(0)|答案(3)|浏览(395)

我需要从字符串中提取以下模式,并根据输入返回一个可能的匹配项。
我使用正则表达式,通过不同的可能性,但我没有得到预期的结果:
输入a): 71346 G249 USD 70045620 27/08/2020 001 / 004 输入b): 71346 G249 USD 70045620/2020 27/08/2020 001 / 004 试试看

String result = data.replaceFirst ( "(.*?([0-9]{6,}\\/[0-9]{4}).*)|(.*?([0-9]{6,}).*)", "$1" );

试试两个

String result = data.replaceFirst ( ".*?([0-9]{6,}\\/[0-9]{4})|([0-9]{6,}).*", "$1" );

试试三个

String result = data.replaceFirst ( ".*?([0-9]{6,})([0-9]{6,}\\/[0-9]{4}).*", "$1" );

根据输入的预期结果:
输入a): 70045620 输入b): 70045620/2020

ix0qys7i

ix0qys7i1#

我会用 String#replaceAll 此处为:

String[] inputs = { "71346 G249 USD 70045620 27/08/2020 001 / 004",
                    "71346 G249 USD 70045620/2020 27/08/2020 001 / 004" };
for (String input : inputs) {
    String match = input.replaceAll(".*\\b(\\d{8}(?:/\\d{4})?)\\b.*", "$1");
    System.out.println(input + " => " + match);
}

这张照片:

71346 G249 USD 70045620 27/08/2020 001 / 004 => 70045620
71346 G249 USD 70045620/2020 27/08/2020 001 / 004 => 70045620/2020
gc0ot86w

gc0ot86w2#

以这种方式使用另一种捕获组的方法将根据数据提供不同的组号。如果您想在替换中使用单个组,可以将第二部分设置为可选。

String[] strings = { 
    "71346 G249 USD 70045620 27/08/2020 001 / 004",
    "71346 G249 USD 70045620/2020 27/08/2020 001 / 004"
};
String regex = "^.*?\\b([0-9]{6,}(?:/[0-9]{4})?)\\b.*$";

for (String s : strings) {
    System.out.println(s.replaceFirst(regex, "$1"));
}

查看java演示
输出

70045620
70045620/2020

您还可以找到匹配项,而不是使用replacefirst。

\b[0-9]{6,}(?:/[0-9]{4})?

例如

String[] strings = { 
    "71346 G249 USD 70045620 27/08/2020 001 / 004",
    "71346 G249 USD 70045620/2020 27/08/2020 001 / 004"
};
String regex = "\\b[0-9]{6,}(?:/[0-9]{4})?";    
Pattern pattern = Pattern.compile(regex);    

for (String s : strings) {
    Matcher matcher = pattern.matcher(s);
    if (matcher.find()) {
        System.out.println(matcher.group(0));
    }
}

查看另一个java演示
输出

70045620
70045620/2020
k4aesqcs

k4aesqcs3#

就我个人而言,我会避免使用正则表达式。你好像只想要第四个字。类似于string.split()的东西可能会很好:

import java.io.*; 

public class HelloWorld{

     public static void main(String []args){
        String text = "71346 G249 USD 70045620 27/08/2020 001 / 004";
        String result = text.split(" ")[3];
        System.out.print(result); 
     }
}

上述程序将输出: 70045620 对于第一个输入和 70045620/2020 第二次。

相关问题