用正则匹配叠词成语
能用正则匹配下列叠词成语吗?含情脉脉、大腹便便、风度翩翩,翩翩起舞、姗姗来迟
比如从下列成语中找出叠词成语:
如饥似渴、含情脉脉、不足为据、大腹便便、狼吞虎咽、两全其美、风度翩翩, 惨不忍睹、一败涂地、翩翩起舞、鼠目寸光、姗姗来迟
万籁俱寂、不声不响、不义之财 一馈十起 群龙无首 豺狐之心 本帖最后由 kogawananari 于 2020-10-13 15:56 编辑
import re
print(len(re.findall(r'(.)\1*', '含情脉脉')) < 4)
print(len(re.findall(r'(.)\1*', '不声不响')) < 4) 也别把正则想的太完美了我估摸着 正则实现这个要求费些劲(甚至无法实现) 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) 总算清楚()\数字的含义了,之前还以为()\1与(){1}一样。
# \1代表第一个子组,\2代表第二个子组,且匹配的内容必须和对应子组已经匹配到的内容相同
>>> re.search(r'()()\1\2*', 'aebffaeaefg')
<re.Match object; span=(5, 9), match='aeae'>
# 匹配过程:
# 子组1()匹配到a, 子组2()匹配到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
sunrise085 发表于 2020-10-13 16:30
叫天天应 这样的叠词就匹配不到了
页:
[1]