Python 用正则表达式插入字符
我有一个字符串“(abc)def(abc)”,我想把它变成“(a | b | c)def(a | b | c)”。我可以这样做:Python 用正则表达式插入字符,python,regex,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 wo
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
word='(abc)def(abc)'
模式=“”
而索引
但是我想用正则表达式来缩短它。您能告诉我如何通过正则表达式仅在括号内的字符之间插入字符“|”吗?如何
>>> import re
>>> re.sub(r'(?<=[a-zA-Z])(?=[a-zA-Z-][^)(]*\))', '|', '(abc)def(abc)')
'(a|b|c)def(a|b|c)'
>>重新导入
>>>关于sub(r’(?
>>> import re
>>> re.sub(r'(?<=[a-zA-Z])(?=[a-zA-Z-][^)(]*\))', '|', '(abc)def(abc)')
'(a|b|c)def(a|b|c)'
>>重新导入
>>>re.sub(r’(?我没有足够的声誉来评论,但您正在寻找的正则表达式将如下所示:
"(.*)"
对于找到的每个字符串,在每对字符之间插入括号
让我解释一下正则表达式的每个部分:
( - *represends the character.*
. - A dot in regex represends any possible character.
\* - In regex, this sign represends zero to infinite appearances of the previous character.
) - *represends the character.*
这样,您就可以查找任何介于“()”和“()”之间的字符的外观
希望我能帮上忙:)我没有足够的声誉发表评论,但您正在寻找的正则表达式将如下所示:
"(.*)"
对于找到的每个字符串,在每对字符之间插入括号
让我解释一下正则表达式的每个部分:
( - *represends the character.*
. - A dot in regex represends any possible character.
\* - In regex, this sign represends zero to infinite appearances of the previous character.
) - *represends the character.*
这样,您就可以查找任何介于“()”和“()”之间的字符的外观
希望我能帮上忙:)如果圆括号中只有一个字符,那么你能做的就是简单地用方括号替换圆括号。因此,最初的正则表达式如下:(abc)def(abc)
,最后的正则表达式如下:[abc]def[abc]
。从函数角度来看,(a | b | c)
与[abc]
的含义相同,如果圆括号中只有一个字符,那么可以简单地将圆括号替换为方括号。因此,初始正则表达式将如下所示:(abc)def(abc)
,最终正则表达式将如下所示:[abc]def[abc]
。从功能角度来看,(a | b | c)
与[abc]
具有相同的含义
([^(])(?=[^(]*\))(?!\))
尝试此操作。替换为\1 |
。请参阅演示
尝试此操作。替换为\1 |
。请参阅演示
一个简单的Python版本实现了同样的功能。Regex有点难读,而且通常很难调试或更改
word = '(abc)def(abc)'
split_w = word.replace('(', ' ').replace(')', ' ').split()
split_w[0] = '|'.join( list(split_w[0]) )
split_w[2] = '|'.join( list(split_w[2]) )
print "(%s)%s(%s)" % tuple(split_w)
我们将给定的字符串分为三部分,用管道将第一部分和最后一部分分开,然后将它们连接起来。一个简单的Python版本可以实现同样的效果。Regex有点难读,而且通常很难调试或更改
word = '(abc)def(abc)'
split_w = word.replace('(', ' ').replace(')', ' ').split()
split_w[0] = '|'.join( list(split_w[0]) )
split_w[2] = '|'.join( list(split_w[2]) )
print "(%s)%s(%s)" % tuple(split_w)
我们把给定的字符串分成三部分,用管道把第一部分和最后一部分分开,然后再把它们连接起来。这不是\(
和\)
?从我的到期日开始,正常的“re”库正常的(())工作得很好。我回家后会检查:)@A.Abramov不,这会成为一个组,你需要逃离它们,不是吗\(
和\)
?从我的到期日起,正常的“re”库正常运行。我回家后会检查:)@A.Abramov不,那会成为一个群体,你需要逃离他们。我不擅长正则表达式。那么你能解释一下你的表达式是做什么的吗?@dragon2fly我已经添加了一个解释。如果你想要更多的解释,请随意发表评论:)是否有任何搜索条件需要在括号内,并且条件的顺序必须跟在你的后面?@因为没有任何东西超出了“向后看”或“向前看”的范围,所以可以按任何顺序编写,即“向前看”后面跟着“向后看”。但这不是一般情况。这完全取决于你需要匹配的字符串。截至搜索条件ns,这一行可以完成你的工作。在python2.7中测试。谢谢你的解释。这很有帮助。我不擅长正则表达式。那么你能解释一下你的表达式做什么吗?@dragon2fly我已经添加了一个解释。如果你想要更多的解释,请随时发表评论:)是否有任何搜索条件需要在括号内,并且条件的顺序必须跟在你的后面?@因为没有任何东西在“向后看”或“向前看”偏执命题之外,所以可以按任何顺序编写(先向前看,再向后看)。但这不是一般情况。这完全取决于需要匹配的字符串。至于搜索条件,这一行就可以完成你的任务。在python2.7中测试。感谢您的解释。这个词可能从abcdef到(ab)cdef,ab(cd)ef,(ab)(cd)(ef)。。。所以我需要一个正则表达式来把竖条放在正确的位置。这个词可能从abcdef到(ab)cdef,ab(cd)ef,(ab)(cd)(ef)。。。所以我需要一个正则表达式来把竖条放在正确的位置。