我正在使用正则表达式编写Java程序,我有许多句子结构。给定字符串为:"book 'learning java' for doctor ahmed mohamed" 或 "the best title: learning java for ahmed mohamed" 等等。
意思是:
(book) 可能是 [the book或text:或(text)]。
(for doctor) 可能是 [for author或for或by for doctor]。
输出:
我想提取在(book)之后并在(for doctor)之前的任何单词,并将其命名为Title。提取在(for doctor)之后的任何单词并将其命名为Author。
意思是:
(book) 可能是 [the book或text:或(text)]。
(for doctor) 可能是 [for author或for或by for doctor]。
输出:
我想提取在(book)之后并在(for doctor)之前的任何单词,并将其命名为Title。提取在(for doctor)之后的任何单词并将其命名为Author。
String inputtext = "book 'learning java' for doctor ahmed mohamed";
Pattern p = Pattern.compile("(?<=(book| the book| \\( . \\)|\\:)) .*? (?=(for doctor| for| for author))");
Matcher m = p.matcher(inputtext);
if (m.matches()) {
String author = m.group(1).trim();
String bookTitle = m.group(2).trim();
System.out.println("Title is : " + author);
System.out.println("Author is : " + bookTitle);
(书)可能是[书或文本:或(文本)]
,但你仍然有一个例子不符合这个规则:最佳标题:为艾哈迈德·穆罕默德学习Java
。是否有固定的语法将被使用,还是以下也可能:'学习Java'由艾哈迈德·穆罕默德
,艾哈迈德·穆罕默德:学习Java
等? - 如果是后者,正确提取标题和作者可能会相当困难。 - Thomas