gpt4 book ai didi

java - 替换单词中的重复字母,但有异常(exception)

转载 作者:行者123 更新时间:2023-12-01 00:09:43 25 4
gpt4 key购买 nike

我想要一个正则表达式,(在 Java 中)将每个重复的辅音替换为单个字母,所有重复的辅音都替换为一个初始的“inn”。
我用一些例子更好地解释自己:
asso > asoassso > asoassocco > asocoinnasso > innaso
我找到了一种方法来替换所有重复的字母
Pattern.compile("([^aeiou])+\1").matcher(text).replaceAll("$1")
我找到了一种方法来识别单词是否不以“inn”开头:
Pattern.compile("^(?!inn).+").matcher(text).matches()
但我不知道如何合并它们,即,如果单词以 'inn' 开头,则去除所有双子辅音但初始的 'nn'。

任何人都可以帮助我吗? (我想用正则表达式解决这个问题,以便应用 replaceAll )

谢谢

最佳答案

我不知道为什么你必须用一个正则表达式来完成这一切,但如果你必须......尝试使用负回顾:

Pattern.compile("((?<!^i(?=nn))[^aeiou])+\\1")

这个gobbledygook分解:
  • (?=X)意思是:不要消费任何东西,只要检查 X 是否出现在这里。如果没有,那就不是一场比赛。
  • (?<!X)表示“负向后视”:它不消耗任何字符,但如果 X 出现在该确切位置,则无法匹配。所以,如果在这个确切的位置我们在文本中的第一个字符上,并且它是一个“i”,那么无论如何它都是失败的。
  • (?<!^i(?=nn))不消耗任何东西,但它在满足以下条件的任何位置都会失败:紧接在“光标”之前有一个 i,在此之前是字符串的开头。在“光标”之后有 2 个 n。如果这一切成立,失败。否则什么都不做(继续处理)。
  • 剩下的就是你已经写的东西了。
  • 关于java - 替换单词中的重复字母,但有异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59750655/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com