问候全部;
我是使用正则表达式的初学者。我想要做的是在某种模式之后提取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个单词后停止?
请您帮我解决任何想法?
答案 0 :(得分:2)
要仅匹配以下两个单词,请尝试以下单词:
(?<=الدكتور)\s[^\s]+\s[^\s]+
.*
将匹配所有内容直到字符串结尾,这样就不是你想要的了
\s
是一个空格字符
[^\s]
是一个否定的字符组,它将匹配除空白之外的任何内容
所以我的解决方案将匹配一个空格,然后至少一个非空格(第一个单词),然后再一个空格,再一次至少一个非空格(第二个单词)。
为了匹配你的第二个模式我会做第二个正则表达式(只需在lookbehind中交换部分)并在第二步中匹配这个模式。正则表达式更容易阅读。
或者你可以试试这个
(?<=الدكتور)\s[^\s]+\s[^\s]+|(?<=والدكتورة)\s[^\s]+\s[^\s]+