搜索子字符串并在分析后替换它们

2024-09-26 22:52:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我的文件中多次出现这样的字符串:

%na^me%
%name^%
%^name%
....

我想在我的文件中搜索像这样的每个字符串,并在分析字符串后替换它。 例如

string `%^name%` will be replaced `Data`
string `%name^%` will be replaced with `DATA`
....

为了找到我的子字符串,我将这个函数与regex一起使用

re.findall('(?<=\%)(.*?)(?=\%)', data)

它发现子字符串很好。但是如何替换它们呢

我看到的解决方案是创建映射并迭代,用某个值替换每一个出现的值

但是有更好的方法吗


Tags: 文件函数字符串nameredatastringwith
2条回答

您可以使用以下模式,注意您需要用\转义^。相反,您可以使用grouping,如果您希望python将您的模式解释为regex格式,您还需要在模式之前使用r

>>> s="""%na^me%
... %name^%
... %^name%"""
>>> l= re.findall(r'%([a-zA-Z\^]+)%',s)
['na^me', 'name^', '^name']

对于替换字符串,可以使用如下字典,并用str.replace()替换模式:

>>> d={'^name':'Data','name^':'DATA','na^me':'DAta'}
>>> for i in l :
...   s=s.replace(i,d[i])
... 
>>> s
'%DAta%\n%DATA%\n%Data%'

你不需要去re.findall。只要re.sub就可以了

>>> s = '''%na^me%
%name^%
%^name%'''
>>> m = re.sub(r'(?<=%)\^.*?(?=%)', r'Data', s)
>>> f = re.sub(r'(?<=%).*?\^(?=%)', r'DATA', m)
>>> print(f)
%na^me%
%DATA%
%Data%

更新:

>>> m = re.sub(r'(?<=%)\^.*?(?=%)', r'Data', s)
>>> f = re.sub(r'(?<=%).*?\^(?=%)', r'DATA', m)
>>> j = re.sub(r'(?<=%).*?.\^..*(?=%)', r'datA', f)
>>> print(j)
%datA%
%DATA%
%Data%

如果你还想替换%,你可以试试这个

>>> m = re.sub(r'%\^.*?%', r'Data', s)
>>> f = re.sub(r'%.*?\^%', r'DATA', m)
>>> j = re.sub(r'%.*?.\^..*%', r'datA', f)
>>> print(j)
datA
DATA
Data

相关问题 更多 >

    热门问题