使用正则表达式匹配也可以处理撇号的单词

java regex split word apostrophe

5752 观看

2回复

365 作者的声誉

我必须将一行文本分隔为多个单词,并且对要使用的正则表达式感到困惑。我到处都在寻找与单词匹配的正则表达式,并找到了与本文类似的正则表达式,但希望在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]匹配的简单正则表达式,但是我不确定如何使用先行或后向匹配撇号和其余单词。

作者: Richard Duerr 的来源 发布者: 2012 年 11 月 29 日

回应 2


3

20662 作者的声誉

使用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

作者: Alex 发布者: 2012 年 11 月 29 日

0

1938 作者的声誉

以下正则表达式似乎正确覆盖了示例字符串。但这并不涵盖单引号的情况。

[\s,.?!"]+

Java代码:

String input = "I like to eat but I don't like to eat everyone's food, or they'll starve.";
String[] inputWords = input.split("[\\s,.?!]+");

如果我理解正确,只要在单词字符之后,撇号就应该单独放置。下一个正则表达式应涵盖上述内容以及撇号的特殊情况。

(?<!\w)'|[\s,.?"!][\s,.?"'!]*

Java代码:

String input = "I like to eat but I don't like to eat everyone's food, or they'll starve.";
String[] inputWords = input.split("(?<!\\w)'|[\\s,.?\"!][\\s,.?\"'!]*");

如果我在字符串上运行第二个正则表达式:Hey there! Don't eat 'the mystery meat'. 在字符串数组中得到以下单词:

Hey
there
Don't
eat
the
mystery
meat'
作者: Francis Gagnon 发布者: 2012 年 12 月 2 日
32x32