繁体   English   中英

python regexp中的特殊字符问题

[英]Special Character problem in regexp by python

我在xml文件上应用了一些正则表达式来查找和替换值。 通常它可以正常工作。(我听到声音说“使用xml解析器”。但是我不能。)但是,如果值中有特殊字符,它将破坏所有内容。

想想我有一个xml文件,如下所示:

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

如果我尝试替换“ <idle2><value> ”节点中的值,则“ <idle1><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>

是你想要的吗?

当处理不可预测的数据源以将有效字符列入白名单时,我发现最好。 因此,连同您要进行的其他正则表达式替换一起,删除未列入白名单的所有内容,即az 0-9:,。 -

查看数据并确定适合您任务的白名单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM