我有一个喜欢的
rjg[]u[ur"fur[ufrng[]"gree
,
我希望用“#”替换“”之间的“[”和“]”,结果是
rjg[]u[ur"fur[ufrng[]"gree
=> rjg[]u[ur"fur#ufrng##"gree
,
我怎么能在python中得到它?
答案 0 :(得分:4)
单线解决方案:
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
答案 1 :(得分:1)
我会尝试
L = data.split('"')
for i in range(1, len(L), 2):
L[i] = re.sub(r'[\[\]]', '#', L[i])
result = '"'.join(L)
答案 2 :(得分:0)
一个选项是使用str
内置函数split()
和replace()
,如下所示(没有正则表达式):
s = 'rjg[]u[ur"fur[ufrng[]"gree'
l = s.split('"')
new_string = '"'.join(w.replace('[', '#').replace(']', '#') for w in l[1:-1])
res = '"'.join((l[0], new_string, l[-1]))
<强>输出:强>
>>> res
'rjg[]u[ur"fur#ufrng##"gree'
答案 3 :(得分:0)
没有正则表达的单线。虽然你的解决方案非常棒@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]"
这仍然适用于不均匀数量的引号和开头或结尾的引用。