编写正则表达式从Java中提取文本中的单词

时间:2013-03-11 12:12:00

标签: java regex

我使用正则表达式用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);

1 个答案:

答案 0 :(得分:0)

我会尝试提供一个提示,但由于我无法阅读你的表达,我只能猜到。

所以你的表达是这样的:

(?<=(للدكتورة|للعلامه|للشيخ|للكاتب |للكاتبه|للامام|للاستاذ|للقاضى|للدكتور|ل ))\s[^\s]+\s[^\s]+

在分解中它看起来像这样:

  • (?<=(للدكتورة|للعلامه|للشيخ|للكاتب |للكاتبه|للامام|للاستاذ|للقاضى|للدكتور|ل ))
  • 的正面看法
  • 一个空白字符后跟一些单词
  • 一个空白字符后跟一些单词

基本上,匹配将是包含2个空格的任何序列 - 单词组合,并且在匹配中的任何单词之前。

这似乎是你的实际问题,如你所说:

  

这个表达只给我2个字

一种可能的解决方案是匹配超过2个单词,甚至可能超过一个空格。因此,在您回顾之后,请尝试以下操作:(?>\s+[^\s]+)+而不是\s[^\s]+\s[^\s]+。该部分应匹配任何空格序列,后跟非空格,例如: (用英文字母表示)它会匹配aaa bbb以及aaa bbb ccc ddd(HTML不会在这里显示多个空格,但想象的是大于一个空格的间隙)。