在Java中使用不同的阿拉伯语正则表达式模式匹配两三个单词

时间:2011-06-05 09:13:43

标签: java regex arabic

问候全部;

我是使用正则表达式的初学者。我想要做的是在某种模式之后提取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个单词后停止?

请您帮我解决任何想法?

1 个答案:

答案 0 :(得分:2)

要仅匹配以下两个单词,请尝试以下单词:

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

.*将匹配所有内容直到字符串结尾,这样就不是你想要的了

\s是一个空格字符

[^\s]是一个否定的字符组,它将匹配除空白之外的任何内容

所以我的解决方案将匹配一个空格,然后至少一个非空格(第一个单词),然后再一个空格,再一次至少一个非空格(第二个单词)。

为了匹配你的第二个模式我会做第二个正则表达式(只需在lookbehind中交换部分)并在第二步中匹配这个模式。正则表达式更容易阅读。

或者你可以试试这个

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