2013-03-11 25 views
3

我使用正則表達式用Java編寫的程序,我有很多結構的句子 鑑於串; 「書」學習Java爲醫生艾哈邁德·穆罕默德「。或「最好的標題:艾哈邁德·穆罕默德·學習java」,等等......,寫正則表達式來exteract從文本單詞的Java

這意味着:

(書)可能是[書或文字;或(文本)]。

(爲醫生)可以是[作者或用於或通過醫生。

輸出:

我想提取後(書)任何話之前(爲醫生),並把它命名爲標題。 並提取任何單詞後(爲醫生),並將其命名爲作者。

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); 
+4

那麼問題是什麼? – Thomas 2013-03-11 12:14:53

+0

請回答這個問題 – 2013-03-11 15:30:03

+0

如何在(模式p)和(模式pa)中編寫表達式? – 2013-03-11 15:35:04

回答

0

我會嘗試提供一個提示,但因爲我看不懂你的表達,我只能猜測。

所以,你的表情是這樣的:

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

在休息下來就應該是這樣的:

    背後
  • 正面看爲(?<=(للدكتورة|للعلامه|للشيخ|للكاتب |للكاتبه|للامام|للاستاذ|للقاضى|للدكتور|ل))
  • 空格字符,其次是一些字
  • 空格字符,其次是一些字

基本上這場比賽將被包含2點空白任何序列 - 字的組合,並通過任何在你的對手的話preceeded。

這似乎是你的實際問題,因爲你說:

這種表達給我的只有2個字

一個可能的解決方案是更加匹配多於2個字,也許那一個空白。所以在你的背後,試試這個:(?>\s+[^\s]+)+而不是\s[^\s]+\s[^\s]+。這部分應該匹配任何空白後跟非空白的序列,例如(英文字母),它將匹配aaa bbb以及aaa bbb ccc ddd(HTML在這裏不會顯示多個空格,但想象空間大於一個空格)。

+0

請參閱模式p中的正則表達式,並重播此模式中的哪些更改,以便在兩側之間給出字符串。 – 2013-03-12 09:00:23

+0

@ShimaaMohamed您能否提供一個使用英文字母的問題示例?表達式中的那些LTR-RTL開關讓我瘋狂,它使得很難理解實際的表達式(首先,哪個是最後一個等等)。 – Thomas 2013-03-12 09:16:39

+0

我轉換我想用英文 – 2013-03-16 16:04:44