Q:
请教怎样使用Python正则表达式,进行汉语成语模式搜索-CSDN论坛
“问题描述:使用Python正则表达式,进行汉语成语的模式搜索
搜索目的地:汉语成语词典
搜索目标:几种特殊模式的成语,例如:
(1)xxyy模式的,高高兴兴,快快乐乐
(2)数字模式的,三心二意,一泻千里
(3)动物模式的,鸡鸣狗盗,狐假虎威
(4)……
先将汉语成语文件准备好,再在文件中,使用正则表达式,进行搜索。搜索结果,显示在屏幕上,同时保存到一个结果文件中。”
A:
把完整代码给你写出来了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | # Function: # 请教怎样使用Python正则表达式,进行汉语成语模式搜索-CSDN论坛 # Author: Crifan # Update: 20200619 import re seperator = "-" idiomStr = """高高兴兴 快快乐乐 快乐至上 欢欢喜喜 欢天喜地 一心一意 三心二意 一泻千里 三番五次 一鼓作气 以一敌万 鸡鸣狗盗 狐假虎威 兔死狐悲 狗急跳墙 """ def printSeperatorLine(curTitle): print ( "%s %s %s" % (seperator * 30 , curTitle , seperator * 30 )) def printEachMatchGroup(someIter): for curIdx, eachMatch in enumerate (someIter): curNum = curIdx + 1 # print("eachMatch=%s" % eachMatch) eachMatchWholeStr = eachMatch.group( 0 ) print ( "[%d] %s" % (curNum, eachMatchWholeStr)) printSeperatorLine( "xxyy模式成语" ) # xxyyP = "(\S)\1(\S)\2" # xxyyP = "(\S)\1(\S)\2" # xxyyP = "(\S)\1" # xxyyP = "(.)\1" # xxyyP = "(.)\\1" # xxyyP = "(?:P\S)\\1(\S)\\2" xxyyP = "(\S)\\1(\S)\\2" # foundAllXxyy = re.findall(xxyyP, idiomStr, re.S) # foundAllXxyy = re.search(xxyyP, idiomStr, re.S) # foundAllXxyyIter = re.finditer(xxyyP, idiomStr, re.S) foundAllXxyyIter = re.finditer(xxyyP, idiomStr) # print("foundAllXxyy=%s" % foundAllXxyy) # for curIdx, eachMatch in enumerate(foundAllXxyyIter): # curNum = curIdx + 1 # # print("eachMatch=%s" % eachMatch) # eachMatchWholeStr = eachMatch.group(0) # print("[%d] %s" % (curNum, eachMatchWholeStr) printEachMatchGroup(foundAllXxyyIter) # print("%s %s %s" % (seperator*30, "数字模式成语" , seperator*30)) printSeperatorLine( "数字模式成语" ) # refer: # 个,十,百,千,万……兆 后面是什么?-作业-慧海网 zhcnDigitList = [ "一" , "二" , "三" , "四" , "五" , "六" , "七" , "八" , "九" , "十" , "百" , "千" , "万" , "亿" , "兆" , "京" , "垓" , "秭" , "穰" , "沟" , "涧" , "正" , "载" , ] zhcnDigitListGroup = "|" .join(zhcnDigitList) zhcnDigitP = "(%s)\S(%s)\S" % (zhcnDigitListGroup, zhcnDigitListGroup) zhcnDigitIter = re.finditer(zhcnDigitP, idiomStr, re.S) printEachMatchGroup(zhcnDigitIter) printSeperatorLine( "动物模式成语" ) animalList = [ "鸡" , "鸭" , "猫" , "狗" , "猪" , "兔" , "狐" , "狼" , "虎" , "豹" , "狮" , # TODO:添加更多常见动物 ] animalGroup = "|" .join(animalList) animalP = "(%s)\S(%s)\S" % (animalGroup, animalGroup) animalIter = re.finditer(animalP, idiomStr, re.S) printEachMatchGroup(animalIter) """ 附录: 官网文档: python re re — Regular expression operations — Python 3.8.3 documentation https://docs.python.org/3/library/re.html#re.finditer """ |
其中:
- 关于把成语都放到文件中
- 你自己把idiomStr的内容放到文件,再从文件中读入内容,即可
输出:
------------------------------ xxyy模式成语 ------------------------------ [1] 高高兴兴 [2] 快快乐乐 [3] 欢欢喜喜 ------------------------------ 数字模式成语 ------------------------------ [1] 一心一意 [2] 三心二意 [3] 一泻千里 [4] 三番五次 ------------------------------ 动物模式成语 ------------------------------ [1] 鸡鸣狗盗 [2] 狐假虎威 [3] 兔死狐悲
即可实现:
用正则去匹配对应的特定模式的成语了。
转载请注明:在路上 » 【已解决】用Python的正则re去匹配特定模式的成语