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());
}
大家好, 我试图让REGEX将所有单词和数字分成单独的标记,但我希望将某些复合词分开。
所以上面的代码我的问题是我想要
xrayTed
分成
xray
和Ted
但它已经接受了整个令牌 谢谢你的时间
答案 0 :(得分:1)
正则表达式从左到右解释,所以如果是正则表达式引擎
regex1|regex2|regex3
将首先尝试查找regex1
的匹配项,然后尝试查找regex2
的匹配项,最后regex3
(如果未成功regex2
)。
因此,在您的情况下,xrayTed
将与[A-Za-z]+
匹配。如果您要查找Ted
或Barry
具有更高的优先级,请在[A-Za-z]+
之前移动它,以便尝试
Pattern.compile("(Ted)|(Barry)|[A-Za-z]+|[0-9]|| ");
同样在您的情况下,如果它会尝试匹配[A-Za-z]+
或Ted
的第一个字母,则必须中断匹配Barry
。为此,您可以使用((?!Ted|Barry)[A-Za-z])+
请尝试使用
Pattern.compile("(Ted)|(Barry)|((?!Ted|Barry)[A-Za-z])+|[0-9]|| ");
答案 1 :(得分:0)
我认为此代码可以为您提供帮助:
Pattern p= Pattern.compile("([A-Za-z]+|[0-9])(Ted|Barry)|[A-Za-z]+|[0-9]");
Matcher m= p.matcher(s);
while(m.find()) {
if(m.group(2) != null) {
ob.add(m.group(1));
ob.add(m.group(2));
} else {
ob.add(m.group());
}
}