我这才发现,原来我根本看不懂Java的正则表达式!

作者: 光剑书架上的书 | 来源:发表于2021-03-22 23:43 被阅读0次

正则表达式 (\w)((?=\1\1\1)(\1))+

 (\w)((?=\1\1\1)(\1))+

表达式说明:

(\w) 表示匹配并捕获一个单词字符,将匹配内容作为第一个捕获组

(?=\1\1\1) 这是一个零宽断言+反向引用,表示之后应该紧接着连续出现三次第一个捕获组匹配到的字符串,但这三次匹配不占位置,不会吃掉匹配到的字符,所以叫零宽;

(\1) 反向引用,表示接下来应该匹配到第一个捕获组中的内容;

最后 (?=\1\1\1)(\1)+ 用括号() 括起来并且跟上一个 + 号表示这种模式应该至少匹配一次。

例如有字符串: aaaaab,匹配过程是:

①指针从第1个字符开始匹配,\w匹配到字符a,捕获组1的内容是a,指针移动到第2个字符位置;
②(?=\1\1\1)检查第2个字符开始是否紧跟着三个a,发现成立,但不匹配这三个字符,指针仍然停留在第2个字符位置;
③(\1)检查第2个字符是否是a,发现成立,匹配这个字符,指针移动到第3个字符位置;

重复②和③,直到其中一者不能匹配为止。返回之前已匹配到的所有字符。最终的匹配结果就是aaa。

LC:自动校对程序

package com.lightsword.leetcoding

/**
 * @author: Jack
 * 2021/3/19 上午1:45
 *
 * 我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我发现一个发现拼写错误的捷径:

1. 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello
2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello
3. 上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBCC都是错误拼写,应该优先考虑修复AABB,结果为AABCC

我特喵是个天才!我在蓝翔学过挖掘机和程序设计,按照这个原理写了一个自动校对器,工作效率从此起飞。用不了多久,我就会出任CEO,当上董事长,迎娶白富美,走上人生巅峰,想想都有点小激动呢!
……
万万没想到,我被开除了,临走时老板对我说: “做人做事要兢兢业业、勤勤恳恳、本本分分,人要是行,干一行行一行。一行行行行行;要是不行,干一行不行一行,一行不行行行不行。” 我现在整个人红红火火恍恍惚惚的……

请听题:请实现大锤的自动校对程序
 */
class 自动校对程序

fun main() {
    val a1 = "helllooworrlld".rep()
    val a2 = "helloooooaabbbbbbb".rep()
    val a3 = "AABBCC".rep()
    println(a1)
    println(a2)
    println(a3)
}

fun String.rep(): String {
    // \1表示.匹配到的第一个字符
    // \2表示.匹配到的第二个字符
    // (.)\1+表示匹配重复的字符
    return this.replace(Regex("(.)\\1+"), "$1$1")
               .replace(Regex("(.)\\1(.)\\2"), "$1$1$2")
}

//helloworrld
//helloaab
//AABCC

其中, (.)\1+ 表示匹配重复的字符。

相关文章

  • 我这才发现,原来我根本看不懂Java的正则表达式!

    正则表达式 (\w)((?=\1\1\1)(\1))+ 表达式说明: (\w) 表示匹配并捕获一个单词字符,将匹...

  • 2019-11-02

    我发现我根本看不懂鲁迅的书,那一篇野草,是我看不懂的,那一本朝花夕拾,更是我看不懂也要看完的遗憾

  • 原来这才是我

    不知道为什么, 我不喜欢艳阳高照的晴天。 不知道为什么, 我不喜欢拥挤的人潮。 我喜欢的是在图书馆的一角, 那是个...

  • 原来这才是我

    我以为我对亲情,友情,爱情都能免疫,终究是我高估了自己! 今天听说老姑摔伤了,挺严重的,已经二十几天了,还在医院里...

  • 共读《安德的游戏》

    课前:老师,这本书我看了,根本看不懂。 课后:哦!原来是这样,我知道了! 荣获“星云奖”“雨果奖”的科幻小说《安德...

  • 原来这才是我的初心?

    知识点:牛油果沙拉、后厨拿配好的沙拉,牛油果、酸汁、芝麻。 刺贝宿舍,大叶、寿司姜、米饭、酱油。 ...

  • 原来这才是我想要的

    对于一个表格恐惧症的我要来完成这作业,真的是头大。手机内存不够,连表格都下载不了。这几天刚好发烧了,正好找...

  • 原来这才是我想要的

    前几天我的一瓶药完了,我得上昆明拿药,晚上我跟老爸说了这回事儿,当时老爸数落了我一顿,虽然是为我好,但我当时内心还...

  • 原来,这才是真的我

    看,多么傻傻的表情。看,多么惹人爱。看,被欺骗了还那么开心。然而,这不是真正的我,我只是一个善于把情绪用微...

  • 原来这才是我呀

    无美颜无滤镜很平常一女孩, 原来这才是我的本来面目呀。 还有一点点遮挡头发挡住了, 斑斑点点痘痘坑坑我都占了。

网友评论

    本文标题:我这才发现,原来我根本看不懂Java的正则表达式!

    本文链接:https://www.haomeiwen.com/subject/yrhxhltx.html