我需要在一个句子中找到一个子字符串“Hello,叫我XXX。”。句子可能非常长,唯一有助于我确定名称的是,名称总是在"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和点之外的任何字符序列。
如果有人能帮我定义正则表达式,我将不胜感激。 我想弄清楚两个多小时,但没有成功......
答案 0 :(得分:2)
正则表达式应该适合你:
"(?<=call me )[^.]*"
答案 1 :(得分: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!");
答案 2 :(得分:0)
这样的事情:
.*Call\ me\ (.[\w]+).?
检查它是否满足您在线的所有要求:http://www.rubular.com/