我有一个字符串'(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'|' 只有正则表达式括号内的字符之间?
怎么样
>>> 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它没有结束)