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

时间:2017-08-15 09:23:23

标签: python regex

我有一个喜欢的 rjg[]u[ur"fur[ufrng[]"gree

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

rjg[]u[ur"fur[ufrng[]"gree => rjg[]u[ur"fur#ufrng##"gree

我怎么能在python中得到它?

4 个答案:

答案 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]"

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