使用基于空间的REGEX和可选的第3个字符串标记拆分字符串

时间:2013-11-07 18:31:54

标签: java regex

我有一个包含字符串模式

的行的文件

(digit)(one-or-more-space-seperator)(word-possibly-starting-and-ending-with-@)(one-or-more-space-seperator)(more-words-seperated-by-spaces)

例如:

1 NAME first name

2  NAME   last name

3 @silly@  i am nuts

4 @lilly@

上面每行的正则表达式匹配器的结果输出应分别如下:

[1, NAME, first name]

[2, NAME, last name]

[3, @silly@, i am nuts]

[4, @lilly@]

如果你成功找到一个正则表达式,我想知道你是如何制作一个...

当谈到正则表达式时,我陷入了困境:(

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

这样的东西?

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

class Module1{
    public static void main(String[] asd){
        String sourcestring = "1 NAME john smith";
        Pattern re = Pattern.compile("(\\d+)\\s+(NAME|@\\w+@)(.*)");
        Matcher m = re.matcher(sourcestring);
        int i = 0;
        while (m.find()){
            for( int groupIdx = 0; groupIdx < m.groupCount()+1; groupIdx++ ){
                System.out.println( "[" + i + "][" + groupIdx + "] = " + m.group(groupIdx));
            }
            i++;
        }
    }
}

答案 1 :(得分:1)

(\d+) +(\w+|@\w+@) *([\w ]+)?应该做到这一点。 (替换为Java的双重转义)