如何使用正则表达式在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]"