import re
test_str = """
IYAABMDHRPONWUYZZ
BVAABDMYBXXWZZCKU
"""
# First step: find all strings between AA and ZZ
match_results = re.findall("AA(.+)ZZ", test_str, re.I)
# Second step: filter out the ones that contain XX
final_results = [match for match in match_results if not ("XX" in match)]
print(final_results)
我的猜测是,您可能(不确定)想要设计一个类似于以下内容的表达式:
测试
输出
该表达式在regex101.com的右上面板上进行了解释,如果您希望探索/简化/修改它,在this link中,您可以观察它如何与一些示例输入匹配(如果您愿意)
将我对问题的原始评论作为回答
除了已经发布的“单一正则表达式”解决方案外,请考虑以下解决方案:
AA
和ZZ
之间任何文本的所有匹配项,例如,使用以下正则表达式:AA(.+)ZZ
。将所有匹配项存储在列表中李>XX
的匹配项。您甚至不需要为此使用正则表达式,因为包括Python在内的大多数语言都有专用的字符串方法李>你得到的回报是一个干净的解决方案,没有任何复杂的正则表达式。它易于阅读,易于维护,如果要添加任何新条件,可以在最终结果中应用这些条件
要使用一些代码(you can test it here)来支持它,请执行以下操作:
至于分配给
final_results
的部分,它被称为列表理解。既然这不是问题的一部分,我就不在这里解释了如果只想匹配字符A-Z,可以使用
解释
AA
逐字匹配(?:
[A-WYZ]
匹配除X以外的A-Z|
或X(?!X)
匹配X并断言直接右边的不是X)*
关闭非捕获组并重复0+次ZZ
逐字匹配Regex demo
如果还有其他字符,另一种选择是使用negated character class
[^\sX]
匹配除X或空白字符以外的任何字符:Regex demo
另一种选择是使用令牌:
Regex demo
相关问题 更多 >
编程相关推荐