regex- 通过 StringToWordVector 过滤器删除阿拉伯语文本中的重复字母

问题描述 投票:0回答:1

我想删除文本中重复的阿拉伯字母。我如何在 Java 中使用正则表达式来做到这一点?我尝试了不同的正则表达式,但它从我的文本中删除了所有阿拉伯字母!请帮助。 顺便说一句,我将正则表达式与 StringToWordVector 过滤器一起使用,就像 here

中发生的那样

这就是我的应用方式:

filter.setStopwordsHandler(new RegExStopwords("([^\\u1F600-\\u1F6FF\\s].*|[A-Za-z0-9].*|[٠-٩].*|[\\u0617-\\u061A\\u064B-\\u0652].*|[ؐ-ًؚٟ].*|[/(آ|إ|أ)/g, 'ا']|[/(ة)/g, 'ه']|[/(ئ|ؤ)/g, 'ء']|[/(ى)/g, 'ي']|[/([^\\u0621-\\u063A\\u0641-\\u064A\\u0660-\\u0669])/g, '']"));
所以我尝试了 .replaceAll() 函数提到的答案,但它对我不起作用,或者实际上我不知道如何正确地将它们放入我的代码中。

java regex arabic
1个回答
0
投票

我更愿意使用循环

String str = "hello"

char prevChar = ' ';
String result = "";
for(char ch : str.toCharArray()){
    if(ch != prevChar)
         result += ""+ch //concat casts to string for us
    prevChar = ch
}

会返回

helo
(删除重复的
l

编辑:

如果您想使用过滤器,正确的正则表达式应该是

/(.)(?<=\1{2,})/ig

  • 第一组,
    (.)
    抓取任意角色
  • 下一组
    (?<=\1{2,})
    分解如下:
  • \1
    捕获第一组中指定的字符 (
    (.)
    )
  • {2,}
    捕获任何重复两次的组
  • ?<=
    是向后看,基本上是说我们想检查下一个词 (
    \1
    ) 是否存在,但我们不想捕获它。

所以我们只剩下被捕获的

{2,}
,这就是你想要的

如需更多帮助,请尝试这些 Stack Overflow 链接

祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.