正则表达式:匹配叠词
叠词,如“粑粑”、“麻麻”、“咯咯”之类的,字串的重复方式是字符紧挨着出现,对此类结构的正则匹配,我们无需知道我们针对的具体字符是什么,我们关心的是同一行里都有哪些字符是成双成对紧挨着出现的。要找出此类叠词或以此结构组成的其他重复字串,正则表达式需要用到两个知识点:①“分组”概念和②“引用”语法。分组是正则里一个很好的理念和方法,同时也是非常简单的,只需要一对小角括号就能实现。而正则的引用语法就是针对小角括号里的内容,语法也是极其简单,写成 \1 表示引用第一组,\2引用第二组,以此类推,但 \0 则表示完全引用,忽视所有的分组,也不在意正则式子是否做了分组。
好了,我们开始建立能匹配叠词的正则表达式:
(.)\1
上面的式子是不是很简单?可是它的意思不简单:
① (.) :一对小角括号表明分组,里面仅有一个点,英文输入状态下的句号,它代表任意单个字符。
① \1 :引用第一组。也就是括号里的那个点(.)。
这样达成的意思是:检索任意一个字符,如果其后引用该字符成功,则匹配叠词结构的字串。
由于 . 代表任意字符串(换行符除外),所以,两两出现的任意字符都将被匹配,如两个相同的字母、数字、特殊符号、两个空格或制表符等等都与式子描述的结构相匹配。
我们的任务是匹配汉语叠词,字母、数字、符号的两两叠加出现我们不感兴趣,故此,需要加工一下我们前面构造的正则式子:
([一-龥])\1
上面这个改造过的正则式子,[一-龥] 能检索GBK字符集里的20902个汉字,这些单字,只要在文档中以两两叠加的方式出现,上面的式子都能找到它们。当然这个式子并不完美,先秦时代的叠词,乃至前清的叠词,也许它不能全部匹配。
上述对叠词的正则匹配的讨论是非常简单的,它的意义在于启发——复杂的实现机制无非就是由一个个简单的小机制有机构建起来的。
继续跟着老黑学习,晚上好{:4_190:} 大猫咪 发表于 2021-9-26 19:46
继续跟着老黑学习,晚上好
大猫咪晚上好!感谢支持! 马黑黑 发表于 2021-9-26 20:06
大猫咪晚上好!感谢支持!
{:4_190:}老黑辛苦, 学习不少电脑知识 ,真好{:4_191:} 大猫咪 发表于 2021-9-26 20:08
老黑辛苦, 学习不少电脑知识 ,真好
但正则这个东东很多人都觉得艰涩难懂 马黑黑 发表于 2021-9-26 20:14
但正则这个东东很多人都觉得艰涩难懂
有的得慢慢摸索,{:5_106:} 这个没问题 这个没怎么看明白,为什么要找叠词?“一-龥”的含义是什么,为什么能检索GBK字符集里的20902个汉字? 厉害啊,老黑。你真是专家啊。{:4_199:} 红影 发表于 2021-9-26 20:18
这个没怎么看明白,为什么要找叠词?“一-龥”的含义是什么,为什么能检索GBK字符集里的20902个汉字?
查找重复字串,与查找叠词,二者有关联,或说,实现方式一样。这是我们的项目必须要处理的类似的问题之一。
[……] 是正则的一种表达法,字符集。GBK汉字里,从 “一” 到 “龥” 是连在一起的,共20902个单字,所以式子表达的意思就是那些汉字。想一想:字符集的表达方式。
为什么要检索GBK汉字?主流输入法支持的字符集汉字,我检索一下不可以么? 大猫咪 发表于 2021-9-26 20:16
有的得慢慢摸索, 这个没问题
好,厉害 加林森 发表于 2021-9-26 20:22
厉害啊,老黑。你真是专家啊。
哪里哪里?不专也不是家,有点兴趣而已 马黑黑 发表于 2021-9-26 20:27
查找重复字串,与查找叠词,二者有关联,或说,实现方式一样。这是我们的项目必须要处理的类似的问题之一 ...
“GBK汉字里,从 “一” 到 “龥” 是连在一起的,共20902个单字”
原来是这样。龥是最后一个字,现在明白了{:4_204:} 马黑黑 发表于 2021-9-26 20:35
哪里哪里?不专也不是家,有点兴趣而已
我就不行,没有时间去研究这些的。 俺也进来继续学习学习!{:4_178:} 这个我看了一头雾水,没有看懂{:4_203:} 叠词,如“粑粑”、“麻麻”、“咯咯”之类的我拼音很简单啊,多敲一下就可以,但你后面讲我我没有领会 小辣椒 发表于 2021-9-26 21:17
叠词,如“粑粑”、“麻麻”、“咯咯”之类的我拼音很简单啊,多敲一下就可以,但你后面讲我我没有领会
哈哈哈,确实简单
马黑黑 发表于 2021-9-26 21:23
哈哈哈,确实简单
后面的我就不明白了{:4_203:} 小辣椒 发表于 2021-9-26 21:26
后面的我就不明白了
不明白没关系 马黑黑 发表于 2021-9-26 21:56
不明白没关系
我也是搞不明白{:4_170:}