0

我需要在句子“Hello, call me XXX.”中找到一个子字符串。这句话可能真的很长,唯一能帮助我识别名字是什么的事实是 name 总是在 fromat 中"call me"+space+name"+dot。尽管如此,这句话也可能看起来像hello, call me. call me xxx.

Call me John. ⇒ John

Call me Call me John. ⇒ prohibited - confusing

Call me. Call me John. ⇒ John

Call me  Call me John. ⇒ John

Call me Peter .Call me John. ⇒ John

Call me Peter. Call me John. ⇒ prohibited - more then one name...

名称可以是除 \r、\n、\0 和点之外的任何字符序列。

如果有人可以帮助我定义正则表达式,我将不胜感激。我试图弄清楚两个多小时,但没有任何成功......

4

3 回答 3

2

正则表达式应该适合你:

"(?<=call me )[^.]*"
于 2013-02-15T13:17:12.740 回答
1

假设名称不能包含空格:

String string = "Call me Peter .Call me John.";
Matcher matcher = Pattern.compile ("Call me ([^\r\n\0\\. ]+)\\.").matcher (string);
if (matcher.find ())
{
    String name = matcher.group (1);
    if (matcher.find ()) throw new Exception ("Prohibited: too many matches!");
    System.out.println (name);
}
else throw new Exception ("Prohibited: no matches!");
于 2013-02-15T13:23:00.853 回答
0

像这样的东西: .*Call\ me\ (.[\w]+).?

在线检查它是否满足您的所有要求:http ://www.rubular.com/

于 2013-02-15T13:19:43.243 回答