我使用正则表达式用Java编写程序,我的句子结构很多 给定字符串; “书'学习java'为医生艾哈迈德·穆罕默德”。或者“最好的头衔:为艾哈迈德·穆罕默德学习java”,等等......,
意思是:
(书)可能是[书或文字:或(文本)]。
(对于医生)可能[为作者或为医生或由医生]。
输出:
我想在(书)和之前(为医生)提取任何单词并将其命名为Title。 并在(医生)之后提取任何单词,并将其命名为作者。
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);
答案 0 :(得分:0)
我会尝试提供一个提示,但由于我无法阅读你的表达,我只能猜到。
所以你的表达是这样的:
(?<=(للدكتورة|للعلامه|للشيخ|للكاتب |للكاتبه|للامام|للاستاذ|للقاضى|للدكتور|ل ))\s[^\s]+\s[^\s]+
在分解中它看起来像这样:
(?<=(للدكتورة|للعلامه|للشيخ|للكاتب |للكاتبه|للامام|للاستاذ|للقاضى|للدكتور|ل ))
基本上,匹配将是包含2个空格的任何序列 - 单词组合,并且在匹配中的任何单词之前。
这似乎是你的实际问题,如你所说:
这个表达只给我2个字
一种可能的解决方案是匹配超过2个单词,甚至可能超过一个空格。因此,在您回顾之后,请尝试以下操作:(?>\s+[^\s]+)+
而不是\s[^\s]+\s[^\s]+
。该部分应匹配任何空格序列,后跟非空格,例如: (用英文字母表示)它会匹配aaa bbb
以及aaa bbb ccc ddd
(HTML不会在这里显示多个空格,但想象的是大于一个空格的间隙)。