Skip to main content
 首页 » 编程设计

python之python正则表达式中的特殊字符问题

2025年05月04日22EasonJim

我在 xml 文件上应用一些正则表达式来查找和替换值。通常它有效。(我听到声音说“使用 xml 解析器”。同时我不能。)但是如果值中有特殊字符,它会破坏一切。

认为我有一个如下所示的 xml 文件:

<fieldset> 
  <idle1> 
     <value>something\\n</value> 
  </idle1> 
  <idle2> 
    <value>blabla</value> 
  </idle2> 
</fieldset> 

如果我尝试替换“<idle2><value>”节点中的值,“<idle1><value>”节点的值将变为“something\n”。在写入文件时,xml 变为:

    <fieldset> 
      <idle1> 
         <value>something 
</value> 
      </idle1> 
      <idle2> 
        <value>blabla</value> 
      </idle2> 
    </fieldset> 

好吧,在搜索和替换中我都使用“r”字符串文字。但它似乎不起作用。我解决了这个问题。对于每次搜索和替换,我将“\n”替换为“\\n”,然后将结果写入文件。但这不是一种有效的使用方式。

有什么我看不到的吗?我只想将“\\n”写入文件。这是我想要的吗?

编辑:这是我的正则表达式:

用于搜索:

self.searchPattern=(<fieldset>)(.*?)(<idle2>)(.*?)(<value>)(.*?)(</value>)(.*?)(</idle2>)(.*?)(</fieldset>) 

用于替换:

self.replacePattern=`\g<1>\g<2>\g<3>\g<4><value>denemeasdasd\\\\n</value>\g<8>\g<9>\g<10>\g<11>` 

这是搜索的python代码:

self.pattern = re.compile(r''''''+self.searchPattern+'''''', flags = re.S | re.U) 

这是为了替换

outtext = self.pattern.sub(r''''''+self.replacePattern+'''''',r''''''+self.match.group(0)+'''''') 

请您参考如下方法:

我不明白你的解释。

就我个人而言,我是这样写的:

import re 
 
RE = ('(^([ \t]+)<(idle2)>(?:\n|\r\n?)[ \t]+<value>)' 
      '(.*?)' 
      '(?=</value>(?:\n|\r\n?)\\2</\\3>)') 
 
print repr(ch),'\n' 
print ch 
print '\n-------------------------------------------------' 
print repr(re.sub(RE,'\\1AAA',ch,flags = re.M)) , '\n' 
print re.sub(RE,'\\1-----HHHHHHXXXXXXX-------',ch,flags = re.M) 

结果

'<fieldset>\n  <idle1>\n    <value>something\\n</value>\n  </idle1>\n  <idle2>\n    <value>blabla</value>\n  </idle2>\n</fieldset>' 
 
<fieldset> 
  <idle1> 
    <value>something\n</value> 
  </idle1> 
  <idle2> 
    <value>blabla</value> 
  </idle2> 
</fieldset> 
 
------------------------------------------------- 
'<fieldset>\n  <idle1>\n    <value>something\\n</value>\n  </idle1>\n  <idle2>\n    <value>AAA</value>\n  </idle2>\n</fieldset>' 
 
<fieldset> 
  <idle1> 
    <value>something\n</value> 
  </idle1> 
  <idle2> 
    <value>-----HHHHHHXXXXXXX-------</value> 
  </idle2> 
</fieldset> 

这是你想要的吗?