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
但它已经接受了整个令牌
谢谢你的时间
最佳答案
正则表达式是从左到右解释的,因此如果正则表达式引擎是
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
。为此,您可以使用negative-look-ahead机制,例如((?!Ted|Barry)[A-Za-z])+
所以尝试
Pattern.compile("(Ted)|(Barry)|((?!Ted|Barry)[A-Za-z])+|[0-9]|| ");