如何编写Python正则匹配首尾字母不同的字符串?
匹配首尾字母不同的字符串(Python兼容方案)
有两种可行方案,一种是对现有正则取反,另一种是直接编写目标正则:
方案一:对现有正则取反
现有正则用于匹配首尾字母相同、单个字母、空白字符串,我们可以在Python中通过re.fullmatch结合逻辑取反来筛选目标字符串:
import re # 原匹配首尾相同/单字母/空白的正则(修正^\s为^\s$以准确匹配空白字符串,和示例一致) original_regex = r'^\s$|^[a-z]$|^([a-z]).*\1$' test_cases = ["aaabbcz", "zba", "ccb", "cbbbba", "aba", "a", " ", "cccbbbbbbac"] for s in test_cases: # 若字符串不匹配原正则,则符合首尾字母不同的要求 if not re.fullmatch(original_regex, s): print(f"匹配通过: {s}")
方案二:直接编写目标正则
直接编写正则,通过负向预查排除不符合条件的情况,最终匹配由小写字母组成、长度≥2、首尾字母不同的字符串:
import re target_regex = r'^(?!^[a-z]$)(?!^([a-z]).*\1$)[a-z]+$' test_cases = ["aaabbcz", "zba", "ccb", "cbbbba", "aba", "a", " ", "cccbbbbbbac"] for s in test_cases: if re.fullmatch(target_regex, s): print(f"匹配通过: {s}")
正则说明:
(?!^[a-z]$):排除单个小写字母的情况(?!^([a-z]).*\1$):排除首尾字母相同的情况[a-z]+$:匹配由一个或多个小写字母组成的字符串(结合前面的断言,实际为长度≥2的字母串)
内容的提问来源于stack exchange,提问作者Saikat Sahana
相关产品推荐
相关产品推荐

