regex 只匹配给定单词中字母的正则表达式

u91tlkcl  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(67)

我正在尝试创建一个正则表达式,它将允许测试字符串与以下条件匹配:
1.测试字符串可以是任何长度,并包含任何字母。
1.正则表达式中的所有字符都必须匹配。
1.正则表达式中的所有字母必须匹配它们在正则表达式中重复的次数。
1.如果一个字母在正则表达式中重复了不止一次,那么它在测试字符串中可以是连续的,也可以被其他字母分隔。
1.测试字符串中的字母不必与正则表达式的顺序相同。
因此,如果:

TEST STRING = polymmorphiiic

以下正则表达式将匹配

ppy
ooyc
ciii

而以下将失败:

pmy
iy
yrz

感谢您的帮助,因为我可以得到所有上述满意。
我试过分解所有的需求,并为每个需求创建正则表达式字符串,但我无法克服字符串将涵盖所有需求。

klr1opcd

klr1opcd1#

可以使用re.findall()从字符串中获取匹配字符。排序结果和排序模式之间的比较将处理顺序和字符计数的差异。

import re

testString = "polymmorphiiic"

for p in ("ppy", "ooyc", "ciii", "pmy", "iy", "yrz"):
    print(p,"matches:",sorted(p) ==  sorted(re.findall(f"[{p}]",testString)))

ppy matches: True
ooyc matches: True
ciii matches: True
pmy matches: False
iy matches: False
yrz matches: False

注意,你不需要正则表达式来实现这个过程,一个集合就足以过滤匹配的字符:

for p in ("ppy", "ooyc", "ciii", "pmy", "iy", "yrz"):
    matches = set(p).intersection
    print(p,"matches:",sorted(p) == sorted(filter(matches,testString)))

即使是顺序搜索也会起作用:

for p in ("ppy", "ooyc", "ciii", "pmy", "iy", "yrz"):
    print(p,"matches:",sorted(p) == sorted(filter(p.__contains__,testString)))

相关问题