首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在文件中搜索字符串,同时忽略id并只替换子字符串

在文件中搜索字符串,同时忽略id并只替换子字符串
EN

Stack Overflow用户
提问于 2015-06-09 06:41:49
回答 1查看 107关注 0票数 0

我已经获得了一个由外部应用程序生成的主.xml文件,并希望通过使用python修改和删除一些行来创建几个新的.xmls。用于这些适配器的搜索字符串和替换字符串存储在数组中,例如:

代码语言:javascript
复制
replaceArray = [
[u'ref_layerid_mapping="x4049" lyvis="off" toc_visible="off"',
u'ref_layerid_mapping="x4049" lyvis="on" toc_visible="on"'],
[u'<TOOL_BUFFER RowID="106874" id_tool_base="3651" use="false"/>',
u'<TOOL_BUFFER RowID="106874" id_tool_base="3651" use="true"/>'],
[u'<TOOL_SELECT_LINE RowID="106871" id_tool_base="3658" use="false"/>',
u'<TOOL_SELECT_LINE RowID="106871" id_tool_base="3658" use="true"/>']]

因此,我想遍历我的文件,并将所有出现的'ref_layerid_mapping="x4049" lyvis="off" toc_visible="off"'替换为'ref_layerid_mapping="x4049" lyvis="on" toc_visible="on"'等等。不幸的是,"RowID“、”id_tool_base“和”ref_layerid_mapping“的ID值有时会发生变化。因此,我需要的是搜索主文件中整个字符串的匹配,而不管哪个id值在引号之间,并且只替换replaceArray的两个字符串中不同的子字符串(例如,use=“true”而不是use=“false”)。我不太熟悉正则表达式,但我认为我需要这样的东西来搜索?

代码语言:javascript
复制
re.sub(r'<TOOL_SELECT_LINE RowID="\d+" id_tool_base="\d+" use="false"/>', "", sentence)

我很高兴任何提示都指向正确的方向!如果您需要更多的信息,或者我的问题有什么不清楚的地方,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-09 07:28:50

一种方法是有一个替换文本的函数。该函数将从re.sub获取match对象,并插入从要替换的字符串中捕获的id。

代码语言:javascript
复制
import re

s  = 'ref_layerid_mapping="x4049" lyvis="off" toc_visible="off"'
pat = re.compile(r'ref_layerid_mapping=(.+) lyvis="off" toc_visible="off"')

def replacer(m):
    return "ref_layerid_mapping=" + m.group(1) + 'lyvis="on" toc_visible="on"';

re.sub(pat, replacer, s)

输出:

代码语言:javascript
复制
'ref_layerid_mapping="x4049"lyvis="on" toc_visible="on"'

另一种方法是在替换模式中使用反向引用。(见http://www.regular-expressions.info/replacebackref.html)

例如:

代码语言:javascript
复制
import re
s = "Ab ab"
re.sub(r"(\w)b (\w)b", r"\1d \2d", s)

输出:

代码语言:javascript
复制
'Ad ad'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30724715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档