Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用正则表达式插入字符_Python_Regex - Fatal编程技术网

Python 用正则表达式插入字符

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

我有一个字符串“(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
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)。。。所以我需要一个正则表达式来把竖条放在正确的位置。