我必须将一行文本分成单词,并且对使用什么正则表达式感到困惑。
我到处寻找匹配单词的正则表达式,并找到了与这篇文章类似的正则表达式,但希望它在 java 中(java 不处理常规字符串中的 \ )。
正则表达式匹配单词和带有撇号的单词
我已经尝试了每个答案的正则表达式,并且不确定如何为此构造一个用于java的正则表达式(我假设所有正则表达式都是相同的)。如果在我看到的正则表达式中将 \ 替换为 \,则正则表达式不起作用。
我也尝试自己查找并来到此页面:http://www.regular-expressions.info/reference.html
但我无法理解正则表达式高级技术。
我正在使用 String.split(此处为正则表达式字符串)来分隔字符串。
一个例子是,如果我得到以下内容:
“我喜欢吃,但我不喜欢吃大家的食物,不然他们会饿死的。”
我想匹配:
I
like
to
eat
but
I
don't
like
to
eat
everyone's
food
or
they'll
starve
我也不想匹配 '' 或 '''' 或 ' ' 或 '.'' 或其他排列。
我的分隔符条件应类似于:
[匹配任何单词字符][如果撇号前面有单词字符,则还匹配撇号,然后匹配其后的单词字符(如果有的话)
我得到的只是一个匹配单词 [\w] 的简单正则表达式,但我不确定如何使用前视或后视来匹配撇号,然后匹配剩余的单词。
使用来自的答案WhirlWind
在我的评论中所述的页面上,您可以执行以下操作:
String candidate = "I \n"+
"like \n"+
"to "+
"eat "+
"but "+
"I "+
"don't "+
"like "+
"to "+
"eat "+
"everyone's "+
"food "+
"'' '''' '.' ' "+
"or "+
"they'll "+
"starv'e'";
String regex = "('\\w+)|(\\w+'\\w+)|(\\w+')|(\\w+)";
Matcher matcher = Pattern.compile(regex).matcher(candidate);
while (matcher.find()) {
System.out.println("> matched: `" + matcher.group() + "`");
}
它将打印:
> matched: `I`
> matched: `like`
> matched: `to`
> matched: `eat`
> matched: `but`
> matched: `I`
> matched: `don't`
> matched: `like`
> matched: `to`
> matched: `eat`
> matched: `everyone's`
> matched: `food`
> matched: `or`
> matched: `they'll`
> matched: `starv'e`
您可以在这里找到一个正在运行的示例:http://ideone.com/pVOmSK
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)