Java 基于空间和可选的第三个字符串标记使用正则表达式拆分字符串

Java 基于空间和可选的第三个字符串标记使用正则表达式拆分字符串,java,regex,Java,Regex,我有一个文件,其中的行具有字符串模式 (数字)(一个或多个空格分隔符)(单词可能以-@开头和结尾)(一个或多个空格分隔符)(多个单词以空格分隔) 例如: 上述各行的正则表达式匹配器的结果输出应分别如下所示: [1, NAME, first name] [2, NAME, last name] [3, @silly@, i am nuts] [4, @lilly@] 如果你成功地找到了正则表达式,我想知道你是如何制作正则表达式的 说到正则表达式,我会陷入困境:( 非常感谢您的帮助!(\d+

我有一个文件,其中的行具有字符串模式

(数字)(一个或多个空格分隔符)(单词可能以-@开头和结尾)(一个或多个空格分隔符)(多个单词以空格分隔)

例如:

上述各行的正则表达式匹配器的结果输出应分别如下所示:

[1, NAME, first name]

[2, NAME, last name]

[3, @silly@, i am nuts]

[4, @lilly@]
如果你成功地找到了正则表达式,我想知道你是如何制作正则表达式的

说到正则表达式,我会陷入困境:(

非常感谢您的帮助!

(\d+)(\w++\w++)*([\w]+)?
应该可以做到这一点。(用Java的双转义代替)

类似的事情

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++;
        }
    }
}
import java.util.regex.Pattern;
导入java.util.regex.Matcher;
类模块1{
公共静态void main(字符串[]asd){
String sourcestring=“1 NAME john smith”;
Pattern re=Pattern.compile(“(\\d+)\\s+(名称|@\\w+@)(.*)”;
Matcher m=re.Matcher(sourcestring);
int i=0;
while(m.find()){
对于(int-groupIdx=0;groupIdx
您基本上已经给出了模式,可以很容易地将其转换为正则表达式。问题出在哪里?这是我尝试的正则表达式:“^([0-9]*)\\s*(\b.*\b)\\s*(*)”不要使用拆分,使用
模式和
匹配器#查找()
尝试。查找()返回false
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++;
        }
    }
}