马黑黑 发表于 2021-9-26 18:46

正则表达式:匹配叠词

叠词,如“粑粑”、“麻麻”、“咯咯”之类的,字串的重复方式是字符紧挨着出现,对此类结构的正则匹配,我们无需知道我们针对的具体字符是什么,我们关心的是同一行里都有哪些字符是成双成对紧挨着出现的。

要找出此类叠词或以此结构组成的其他重复字串,正则表达式需要用到两个知识点:①“分组”概念和②“引用”语法。分组是正则里一个很好的理念和方法,同时也是非常简单的,只需要一对小角括号就能实现。而正则的引用语法就是针对小角括号里的内容,语法也是极其简单,写成 \1 表示引用第一组,\2引用第二组,以此类推,但 \0 则表示完全引用,忽视所有的分组,也不在意正则式子是否做了分组。

好了,我们开始建立能匹配叠词的正则表达式:

(.)\1

上面的式子是不是很简单?可是它的意思不简单:

① (.) :一对小角括号表明分组,里面仅有一个点,英文输入状态下的句号,它代表任意单个字符。
① \1 :引用第一组。也就是括号里的那个点(.)。

这样达成的意思是:检索任意一个字符,如果其后引用该字符成功,则匹配叠词结构的字串。

由于 . 代表任意字符串(换行符除外),所以,两两出现的任意字符都将被匹配,如两个相同的字母、数字、特殊符号、两个空格或制表符等等都与式子描述的结构相匹配。

我们的任务是匹配汉语叠词,字母、数字、符号的两两叠加出现我们不感兴趣,故此,需要加工一下我们前面构造的正则式子:

([一-龥])\1

上面这个改造过的正则式子,[一-龥] 能检索GBK字符集里的20902个汉字,这些单字,只要在文档中以两两叠加的方式出现,上面的式子都能找到它们。当然这个式子并不完美,先秦时代的叠词,乃至前清的叠词,也许它不能全部匹配。

上述对叠词的正则匹配的讨论是非常简单的,它的意义在于启发——复杂的实现机制无非就是由一个个简单的小机制有机构建起来的。

大猫咪 发表于 2021-9-26 19:46

继续跟着老黑学习,晚上好{:4_190:}

马黑黑 发表于 2021-9-26 20:06

大猫咪 发表于 2021-9-26 19:46
继续跟着老黑学习,晚上好

大猫咪晚上好!感谢支持!

大猫咪 发表于 2021-9-26 20:08

马黑黑 发表于 2021-9-26 20:06
大猫咪晚上好!感谢支持!

{:4_190:}老黑辛苦,   学习不少电脑知识 ,真好{:4_191:}

马黑黑 发表于 2021-9-26 20:14

大猫咪 发表于 2021-9-26 20:08
老黑辛苦,   学习不少电脑知识 ,真好

但正则这个东东很多人都觉得艰涩难懂

大猫咪 发表于 2021-9-26 20:16

马黑黑 发表于 2021-9-26 20:14
但正则这个东东很多人都觉得艰涩难懂

有的得慢慢摸索,{:5_106:} 这个没问题

红影 发表于 2021-9-26 20:18

这个没怎么看明白,为什么要找叠词?“一-龥”的含义是什么,为什么能检索GBK字符集里的20902个汉字?

加林森 发表于 2021-9-26 20:22

厉害啊,老黑。你真是专家啊。{:4_199:}

马黑黑 发表于 2021-9-26 20:27

红影 发表于 2021-9-26 20:18
这个没怎么看明白,为什么要找叠词?“一-龥”的含义是什么,为什么能检索GBK字符集里的20902个汉字?
查找重复字串,与查找叠词,二者有关联,或说,实现方式一样。这是我们的项目必须要处理的类似的问题之一。
[……] 是正则的一种表达法,字符集。GBK汉字里,从 “一” 到 “龥” 是连在一起的,共20902个单字,所以式子表达的意思就是那些汉字。想一想:字符集的表达方式。
为什么要检索GBK汉字?主流输入法支持的字符集汉字,我检索一下不可以么?

马黑黑 发表于 2021-9-26 20:33

大猫咪 发表于 2021-9-26 20:16
有的得慢慢摸索, 这个没问题

好,厉害

马黑黑 发表于 2021-9-26 20:35

加林森 发表于 2021-9-26 20:22
厉害啊,老黑。你真是专家啊。

哪里哪里?不专也不是家,有点兴趣而已

红影 发表于 2021-9-26 20:38

马黑黑 发表于 2021-9-26 20:27
查找重复字串,与查找叠词,二者有关联,或说,实现方式一样。这是我们的项目必须要处理的类似的问题之一 ...

“GBK汉字里,从 “一” 到 “龥” 是连在一起的,共20902个单字”

原来是这样。龥是最后一个字,现在明白了{:4_204:}

加林森 发表于 2021-9-26 20:39

马黑黑 发表于 2021-9-26 20:35
哪里哪里?不专也不是家,有点兴趣而已

我就不行,没有时间去研究这些的。

子梦 发表于 2021-9-26 21:03

俺也进来继续学习学习!{:4_178:}

小辣椒 发表于 2021-9-26 21:16

这个我看了一头雾水,没有看懂{:4_203:}

小辣椒 发表于 2021-9-26 21:17

叠词,如“粑粑”、“麻麻”、“咯咯”之类的我拼音很简单啊,多敲一下就可以,但你后面讲我我没有领会

马黑黑 发表于 2021-9-26 21:23

小辣椒 发表于 2021-9-26 21:17
叠词,如“粑粑”、“麻麻”、“咯咯”之类的我拼音很简单啊,多敲一下就可以,但你后面讲我我没有领会

哈哈哈,确实简单

小辣椒 发表于 2021-9-26 21:26

马黑黑 发表于 2021-9-26 21:23
哈哈哈,确实简单

后面的我就不明白了{:4_203:}

马黑黑 发表于 2021-9-26 21:56

小辣椒 发表于 2021-9-26 21:26
后面的我就不明白了

不明白没关系

小辣椒 发表于 2021-9-26 21:58

马黑黑 发表于 2021-9-26 21:56
不明白没关系

我也是搞不明白{:4_170:}
页: [1] 2 3 4 5 6
查看完整版本: 正则表达式:匹配叠词