最新消息:20190717 VPS服务器:Vultr新加坡,WordPress主题:大前端D8,统一介绍入口:关于

【已解决】用Python的正则re去匹配特定模式的成语

Python crifan 3235浏览 0评论

Q:

请教怎样使用Python正则表达式,进行汉语成语模式搜索-CSDN论坛

“问题描述:使用Python正则表达式,进行汉语成语的模式搜索

搜索目的地:汉语成语词典

搜索目标:几种特殊模式的成语,例如:

(1)xxyy模式的,高高兴兴,快快乐乐

(2)数字模式的,三心二意,一泻千里

(3)动物模式的,鸡鸣狗盗,狐假虎威

(4)……

先将汉语成语文件准备好,再在文件中,使用正则表达式,进行搜索。搜索结果,显示在屏幕上,同时保存到一个结果文件中。”

A:

把完整代码给你写出来了:

# Function:
#   请教怎样使用Python正则表达式,进行汉语成语模式搜索-CSDN论坛
#   https://bbs.csdn.net/topics/396860414
# 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:

#   个,十,百,千,万……兆 后面是什么?-作业-慧海网

#   https://www.ajpsp.com/zuoye/4174539

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去匹配特定模式的成语

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
16 queries in 0.063 seconds, using 8.81MB memory