1

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

4

2 回答 2

1

您可以在一行中完成:

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

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

于 2013-04-08T03:13:24.913 回答
0

你需要用吗?量词,这意味着匹配是可选的,'?:' 对匹配进行分组,但不会为该组创建反向引用。代码如下:

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"
于 2013-04-08T00:56:27.013 回答