鱼C论坛

 找回密码
 立即注册
查看: 2331|回复: 5

[已解决]用正则匹配叠词成语

[复制链接]
发表于 2020-10-13 15:50:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
能用正则匹配下列叠词成语吗?
含情脉脉、大腹便便、风度翩翩,翩翩起舞、姗姗来迟
比如从下列成语中找出叠词成语:
如饥似渴、含情脉脉、不足为据、大腹便便、狼吞虎咽、两全其美、风度翩翩, 惨不忍睹、一败涂地、翩翩起舞、鼠目寸光、姗姗来迟
万籁俱寂、不声不响、不义之财 一馈十起 群龙无首 豺狐之心    
最佳答案
2020-10-13 15:53:05
本帖最后由 kogawananari 于 2020-10-13 15:56 编辑
import re

print(len(re.findall(r'(.)\1*', '含情脉脉')) < 4)
print(len(re.findall(r'(.)\1*', '不声不响')) < 4)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-13 15:53:05 | 显示全部楼层    本楼为最佳答案   
本帖最后由 kogawananari 于 2020-10-13 15:56 编辑
import re

print(len(re.findall(r'(.)\1*', '含情脉脉')) < 4)
print(len(re.findall(r'(.)\1*', '不声不响')) < 4)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-13 15:53:39 | 显示全部楼层
也别把正则想的太完美了  我估摸着 正则实现这个要求  费些劲(甚至无法实现)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-13 16:30:41 | 显示全部楼层
import re
str1="如饥似渴、含情脉脉、不足为据、大腹便便、狼吞虎咽、两全其美、风度翩翩、惨不忍睹、一败涂地、翩翩起舞、鼠目寸光、姗姗来迟、万籁俱寂、不声不响、不义之财"
lst=str1.split('、')
for each in lst:
    if re.match(r'((\w)\2\w\w)|(\w\w(\w)\4)',each):
        print(each)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-13 17:20:56 | 显示全部楼层
总算清楚()\数字的含义了,之前还以为()\1与(){1}一样。
# \1代表第一个子组,\2代表第二个子组,且匹配的内容必须和对应子组已经匹配到的内容相同
>>> re.search(r'([abcd])([efg])\1\2*', 'aebffaeaefg')
<re.Match object; span=(5, 9), match='aeae'>
# 匹配过程:
# 子组1([abcd])匹配到a, 子组2([efg])匹配到e, b虽然在子组1的匹配范围内,但\1代表子组1匹配到的内容a, b!=a重新匹配
# b -> (1)  \1 = b ;   f -> (2) \2 = f  ;  f != \1 重新匹配
#  f not in (1) 匹配下一个字符
# a -> (1) \1 = a;  e -> (2) \2 = e  ;  a == \1; e == \2 ; f != \2 匹配结束,返回aeae
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-13 17:25:49 | 显示全部楼层

叫天天应 这样的叠词就匹配不到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 10:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表