2011-06-05 30 views
3

問候所有;在Java中使用不同的阿拉伯語正則表達式匹配兩個或三個詞

我是使用正則表達式的初學者。我想要做的是在特定模式之後提取2或3個阿拉伯文字。

例如:

如果我有一個阿拉伯語的字符串

inputtext = "تكريم الدكتور احمد زويل والدكتورة سميرة موسي عن ابحاثهم العلمية " 

我需要後

الدكتور 

والدكتورة 

這樣的輸出應提取的名字是:

احمد زويل 
سميرة موسى 

是我迄今所做的是以下幾點:

inputtext = "تكريم الدكتور احمد زويل والدكتورة سميرة موسي عن ابحاثهم العلمية " 
Pattern pattern = Pattern.compile("(?<=الدكتور).*"); 
      Matcher matcher = pattern.matcher(inputtext); 
      boolean found = false; 
      while (matcher.find()) { 
       // Get the matching string 
       String match = matcher.group(); 
       System.out.println("the match is: "+match); 
       found = true; 
      } 
      if (!found) 
    { 
     System.out.println("I didn't found the text"); 
    } 

但它返回:

احمد زويل والدكتورة سميرة موسي عن ابحاثهم العلمية 

我不知道如何添加另一種模式以及如何阻止後2個字?

你能幫我解答一下嗎?

回答

2

要只符合以下兩個詞試試這個:

(?<=الدكتور)\s[^\s]+\s[^\s]+ 

.*所以這不是你想要的

\s會匹配一切,直到字符串的結尾是一個空白字符

[^\s]是否定字符組,它將匹配除空白以外的任何內容

所以我的解決方案將匹配一個空格,然後至少一個非空白(第一個單詞),然後再一個空白,再一次至少一個非空白(第二個單詞)。

爲了匹配你的第二個模式,我只需要做第二個正則表達式(只是在lookbehind內部交換部分)並在第二步中匹配這個模式。正則表達式更易於閱讀。

或者你可以試試這個

(?<=الدكتور)\s[^\s]+\s[^\s]+|(?<=والدكتورة)\s[^\s]+\s[^\s]+ 
+0

謝謝你,它的工作原理。 – Daisy 2011-06-05 13:55:46

相關問題