在Java中使用模式匹配

时间:2013-11-23 19:55:29

标签: java regex

我有一些具有模式

的字符串
word(word-number, word-number)

我想使用正则表达式来提取3个单词和2个数字。

我目前正在使用此

    String pattern = "(.+?) (\\() (.+?)(-) (\\d+?) (,) (.+?) (-) (\\d+?) (\\))";
    String a = string.replaceAll(pattern, "$1");
    String b = string.replaceAll(pattern, "$3");
    String c = string.replaceAll(pattern, "$5");
    String d = string.replaceAll(pattern, "$7");
    String e = string.replaceAll(pattern, "$9");

但是没有任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

匹配word(word-number, word-number)的模式只是

String regex = "(\\D+)\\((\\D+)-(\\d+), (\\D+)-(\\d+)\\)";

你正在使用多余的空间和捕获你的组。

现在,要提取每个捕获组,请使用Pattern API。

Matcher m = Pattern.compile(regex).matcher(string);
m.matches();
String a = m.group(1), b = m.group(2), c = m.group(3), d = m.group(4), e = m.group(5);

答案 1 :(得分:1)

你可以像@Marko所说的那样提取捕获组 然后稍微重新排列正则表达式。

 #  "^(.+?)\\((.+?)-(\\d+?),\\s*(.+?)-(\\d+?)\\)$"

 ^                      # BOL
 ( .+? )                # (1), word
 \(                     #  '('
 ( .+? )                # (2), word
 -                      # '-'
 ( \d+? )               # (3), number
 , \s*                  # ', '
 ( .+? )                # (4), word
 -                      # '-
 ( \d+? )               # (5), numbr
 \)                     # ')'
 $                      # EOL