You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python生成仅含OR运算符的正则表达式的所有匹配字符串组合

仅含OR运算符的正则匹配字符串生成方案

实现思路

你需求里的正则结构非常固定,仅包含普通字符、括号、|(且|仅出现在括号内作为选项分隔符),可以通过两步实现全组合生成:

  1. 解析正则字符串,拆分得到若干个位置的可选值列表:固定字符的位置只有1个可选值,括号包裹的位置有多个可选值
  2. 对所有位置的可选值做笛卡尔积,拼接每个组合得到所有匹配字符串

完整实现代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:45:04