Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.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中获取特定str?_Python_Regex - Fatal编程技术网

如何使用正则表达式在python中获取特定str?

如何使用正则表达式在python中获取特定str?,python,regex,Python,Regex,我有一个类似的问题 rjg[]u[ur]fur[ufrng[]gree 我想用#替换“”之间的“[”和“]”,结果是 rjg[]u[ur”fur[ufrng[]格力=>rjg[]u[ur”fur[ufrng]格力 我怎样才能在python中得到这个呢?我会试试看 L = data.split('"') for i in range(1, len(L), 2): L[i] = re.sub(r'[\[\]]', '#', L[i]) result = '"'.join(L) 一套解决方案

我有一个类似的问题
rjg[]u[ur]fur[ufrng[]gree

我想用#替换“”之间的“[”和“]”,结果是

rjg[]u[ur”fur[ufrng[]格力
=>
rjg[]u[ur”fur[ufrng]格力

我怎样才能在python中得到这个呢?

我会试试看

L = data.split('"')
for i in range(1, len(L), 2):
    L[i] = re.sub(r'[\[\]]', '#', L[i])
result = '"'.join(L)
一套解决方案:

import re

text = 'rjg[]u[ur"fur[ufrng[]"gree'
text = re.sub(r'(")([^"]+)(")', lambda pat: pat.group(1)+pat.group(2).replace(']', '#').replace('[', '#')+pat.group(3), text)
print text
输出:

rjg[]u[ur"fur#ufrng##"gree
一个选项是使用内置函数,如下所示(不带regex):

输出:

>>> res
'rjg[]u[ur"fur#ufrng##"gree'

没有正则表达式的单行程序。尽管您的解决方案非常出色@jpnkls

>>> text = 'rjg[]u[ur"fur[ufrng[]"gre[e]"abc[d"ef]"'
>>> '\"'.join([substr.replace('[', '#').replace(']', '#') if n % 2 == 1 else substr for n, substr in enumerate(text.split('\"')[:-1])]+[text.split('\"')[-1]])
rjg[]u[ur"fur#ufrng##"gre[e]"abc#d"ef]"

这仍然适用于不均匀的引号数和开头或结尾的引号。

问题是正则表达式没有嵌套。“中间”引号在这里意味着什么。在我的情况下,
xx[“[”xx
的结果应该是什么?没有类似于
xx”[“[”xx
”的格式,因为将出现在pairI中,并说明仅regex模块无法执行该任务(无嵌套支持)
>>> text = 'rjg[]u[ur"fur[ufrng[]"gre[e]"abc[d"ef]"'
>>> '\"'.join([substr.replace('[', '#').replace(']', '#') if n % 2 == 1 else substr for n, substr in enumerate(text.split('\"')[:-1])]+[text.split('\"')[-1]])
rjg[]u[ur"fur#ufrng##"gre[e]"abc#d"ef]"