使用正则表达式插入char

dra*_*fly 1 python regex

我有一个字符串'(abc)def(abc)',我想把它变成'(a | b | c)def(a | b | c)'.我可以这样做:

    word = '(abc)def(abc)'
    pattern = ''
    while index < len(word):
        if word[index] == '(':
            pattern += word[index]
            index += 1
            while word[index+1] != ')':
                pattern += word[index]+'|'
                index += 1
            pattern += word[index]
        else:
            pattern += word[index]
        index += 1
     print pattern
Run Code Online (Sandbox Code Playgroud)

但我想使用正则表达式来缩短它.你能告诉我如何插入char'|' 只有正则表达式括号内的字符之间?

nu1*_*73R 6

怎么样

>>> import re
>>> re.sub(r'(?<=[a-zA-Z])(?=[a-zA-Z-][^)(]*\))', '|', '(abc)def(abc)')
'(a|b|c)def(a|b|c)'
Run Code Online (Sandbox Code Playgroud)
  • (?<=[a-zA-Z])正面看后面.确保要插入的位置前面有字母表.

  • (?=[a-zA-Z-][^)(]*\))正面向前看.确保位置后跟字母表

    • [^)(]*\) 确保内部的字母表 ()

    • [^)(]*匹配除(or之外的任何东西)

    • \)确保除了()之后的任何事情)

      这部分是非常重要的,因为它与该部分不匹配,def因为def它没有结束)