Java 2个不同字符串的正则表达式,用于说明可选元素

Java 2个不同字符串的正则表达式,用于说明可选元素,java,regex,Java,Regex,我在第二个字符串中有两个字符串“2007al纯文本5567(NS)”和“5567”,我只想从两个字符串中提取一个组,即5567。如何为此编写java正则表达式?格式将是4位年份,2位辖区,字符串纯文本,然后是我想要提取的数字,最后是(NS),但问题是除了数字以外的所有数字都可以是可选的,我如何为此编写一个正则表达式,以便仅在组中捕获数字5567 您需要使用吗?quantifier,这意味着匹配是可选的,“?:”对匹配进行分组,但不为该组创建反向引用。以下是代码: import java.util

我在第二个字符串中有两个字符串“2007al纯文本5567(NS)”和“5567”,我只想从两个字符串中提取一个组,即5567。如何为此编写java正则表达式?格式将是4位年份,2位辖区,字符串纯文本,然后是我想要提取的数字,最后是(NS),但问题是除了数字以外的所有数字都可以是可选的,我如何为此编写一个正则表达式,以便仅在组中捕获数字5567

您需要使用吗?quantifier,这意味着匹配是可选的,“?:”对匹配进行分组,但不为该组创建反向引用。以下是代码:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Regexp
{
    public static void main(String args[])
    {
    String x = "2007 AL PLAIN TEXT 5567 (NS)";
    String y = "5567";
    Pattern pattern = Pattern.compile( "(?:.*[^\\d])?(\\d{4,}){1}(?:.*)?");
    Matcher matcher = pattern.matcher(x);

    while (matcher.find()) 
        {
        System.out.format("Text found in x: => \"%s\"\n",
                  matcher.group(1));
        }

    matcher = pattern.matcher(y);

    while (matcher.find()) 
        {
        System.out.format("Text found in y: => \"%s\"\n",
                  matcher.group(1));
        }
    }
}
输出:

$ java Regexp
Text found in x: => "5567"
Text found in y: => "5567"

你需要使用什么?quantifier,这意味着匹配是可选的,“?:”对匹配进行分组,但不为该组创建反向引用。以下是代码:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Regexp
{
    public static void main(String args[])
    {
    String x = "2007 AL PLAIN TEXT 5567 (NS)";
    String y = "5567";
    Pattern pattern = Pattern.compile( "(?:.*[^\\d])?(\\d{4,}){1}(?:.*)?");
    Matcher matcher = pattern.matcher(x);

    while (matcher.find()) 
        {
        System.out.format("Text found in x: => \"%s\"\n",
                  matcher.group(1));
        }

    matcher = pattern.matcher(y);

    while (matcher.find()) 
        {
        System.out.format("Text found in y: => \"%s\"\n",
                  matcher.group(1));
        }
    }
}
输出:

$ java Regexp
Text found in x: => "5567"
Text found in y: => "5567"

您可以在一行中完成:

String num = input.replaceAll("(.*?)?(\\b\\w{4,}\\b)(\\s*\\(NS\\))?$", "$2");

假设您的目标是“一个至少4个字母数字字符长的单词”。

您可以在一行中完成:

String num = input.replaceAll("(.*?)?(\\b\\w{4,}\\b)(\\s*\\(NS\\))?$", "$2");

假设您的目标是“一个至少4个字母数字字符长的单词”。

如果第二个字符串已经是您要提取的字符串,为什么还需要一个正则表达式?请参阅:因为输入可以是一个或另一个,不是两者都有。如果第二个字符串已经是您试图提取的字符串,为什么还需要一个正则表达式呢?请参阅:因为输入可以是一个或另一个,而不是两个。波希米亚人,我只能使用正则表达式模式,因为它是外部配置波希米亚人的纯文本5567(NS)。。5567可以是字母数字。对不起,我没提那件事。。它可能是556app9(NS)波希米亚式的,我只能使用正则表达式模式,因为它是一个外部配置波希米亚式的纯文本5567(NS)。。5567可以是字母数字。对不起,我没提那件事。。可能是556app9(NS)