如何使用Python生成仅含OR运算符的正则表达式的所有匹配字符串组合
仅含OR运算符的正则匹配字符串生成方案
实现思路
你需求里的正则结构非常固定,仅包含普通字符、括号、|(且|仅出现在括号内作为选项分隔符),可以通过两步实现全组合生成:
- 解析正则字符串,拆分得到若干个位置的可选值列表:固定字符的位置只有1个可选值,括号包裹的位置有多个可选值
- 对所有位置的可选值做笛卡尔积,拼接每个组合得到所有匹配字符串
完整实现代码
import itertools def generate_all_matches(pattern: str) -> list[str]: segments = [] current_normal = [] current_bracket_content = [] in_bracket = False for char in pattern: if char == '(': # 结束普通字符段,加入拆分结果 if current_normal: segments.append([''.join(current_normal)]) current_normal.clear() in_bracket = True elif char == ')': # 结束括号段,拆分OR选项加入结果 options = ''.join(current_bracket_content).split('|') segments.append(options) current_bracket_content.clear() in_bracket = False elif in_bracket: current_bracket_content.append(char) else: current_normal.append(char) # 处理末尾剩余的普通字符段 if current_normal: segments.append([''.join(current_normal)]) # 生成所有组合 return [''.join(combination) for combination in itertools.product(*segments)] # 测试示例 if __name__ == '__main__': pattern = 'ATG(C|G|A)(C|T)GA' matches = generate_all_matches(pattern) for item in matches: print(item)
运行输出
ATGCCGA ATGCTGA ATGGCGA ATGGTGA ATGACGA ATGATGA
说明
该实现支持括号内任意长度的字母选项,例如输入A(BC|DEF)G会输出ABCG、ADEFG两个结果。如果后续需要支持其他正则特殊字符,可在解析逻辑中扩展对应分支即可。
内容的提问来源于stack exchange,提问作者Mohak Sharda
相关产品推荐
相关产品推荐

