Java 使用正则表达式仅拆分特定单词 Vector ob=new Vector(); Pattern p=Pattern.compile(“[A-Za-z]+[0-9]| | | |(Ted)|(Barry)”); 匹配器m=匹配器p; while(m.find()){ ob.add(m.group()); }
大家好, 我试图让正则表达式将所有单词和数字拆分为单独的标记,但我希望某些复合词被拆分 对于上面的代码,我的问题是Java 使用正则表达式仅拆分特定单词 Vector ob=new Vector(); Pattern p=Pattern.compile(“[A-Za-z]+[0-9]| | | |(Ted)|(Barry)”); 匹配器m=匹配器p; while(m.find()){ ob.add(m.group()); },java,regex,Java,Regex,大家好, 我试图让正则表达式将所有单词和数字拆分为单独的标记,但我希望某些复合词被拆分 对于上面的代码,我的问题是 x光检查 分成 x光和Ted 但它已经接受了全部代币 感谢您的时间正则表达式是从左到右解释的,因此如果正则表达式引擎 Vector<Object> ob = new Vector<Object>(); Pattern p= Pattern.compile("[A-Za-z]+|[0-9]|| |(Ted)|(Barry)");
x光检查
分成
x光
和Ted
但它已经接受了全部代币
感谢您的时间正则表达式是从左到右解释的,因此如果正则表达式引擎
Vector<Object> ob = new Vector<Object>();
Pattern p= Pattern.compile("[A-Za-z]+|[0-9]|| |(Ted)|(Barry)");
Matcher m= p.matcher(s);
while(m.find()){
ob.add(m.group());
}
将首先尝试查找regex1
的匹配项,如果未成功,则查找regex2
,最后查找regex3
(如果未成功,则查找regex2
)
因此,在您的情况下,x光
将与[A-Za-z]+
匹配。如果您不想找到优先级更高的Ted
或Barry
将其移动到[A-Za-z]+
之前,请尝试使用
regex1|regex2|regex3
Pattern.compile("(Ted)|(Barry)|[A-Za-z]+|[0-9]|| ");
同样,在您的情况下,如果要尝试匹配Ted
或Barry
的第一个字母,您必须中断匹配[A-Za-z]+
。为此,您可以使用类似于((!Ted|Barry)[A-Za-z])+
所以试试看
regex1|regex2|regex3
Pattern.compile("(Ted)|(Barry)|[A-Za-z]+|[0-9]|| ");
我认为此代码可以帮助您:
Pattern.compile("(Ted)|(Barry)|((?!Ted|Barry)[A-Za-z])+|[0-9]|| ");
欢迎来到StackOverflow,祝贺您的第一个答案!别忘了确保你发布的代码将被编译(你忘记了一个
}
),并解释你的代码是做什么的!一个带有解释的答案比一个代码片段要有用得多:)谢谢你的帮助和建议:)(Ted)|(Barry)|([a-Za-z](?!Ted | Barry))+|[0-9]| |“
似乎出于某种原因放弃了X光的y?看起来它为y存储了一个空令牌,所以它将其拆分为xra Ted
@RobForan抱歉,我把([A-Za-z](?!Ted|Barry))+
搞砸了。如果字符是Ted
或Barry
的第一个字符,而不是Ted
或Barry
之前的字符,则不接受字符应该是((?!Ted | Barry)[A-Za-z])+
。我更新了我的答案。@RobForan让我知道这是否有用。