Python nongreedy regex清理xm

2024-10-03 00:16:26 发布

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

我有一个“xml文件”文件,其中有一些不需要的字符

<data>
  <tag>blar </tag><tagTwo> bo </tagTwo>
  some extra 
  characters not enclosed that I want to remove
  <anothertag>bbb</anothertag>
</data>

我认为下面的非贪心替换将删除<sometag></sometag>中没有正确封装的字符

^{pr2}$

此正则表达式似乎只找到[[]][[]]所指示的位置 我做错什么了?在

编辑: 这个问题的动机已经解决了(参见注释,我在xml文件中有一个错误,导致它无法解析-它与我要删除的字符无关)。然而,我仍然很好奇regex是否可行(以及我的尝试有什么问题),因此我不删除这个问题。在


Tags: 文件datatagnotsomexml字符extra
2条回答
 "</[^>]+?>[^<>]+?<" 

在ipython中:

^{pr2}$

除非指定re.DOTALL标志,否则点与换行符不匹配。在

re.sub("</([a-zA-Z]+)>.*?<","</\\1><",text, flags=re.DOTALL)

应该能正常工作。(如果不是,我的python错了,而不是regex。请更正。)

我认为在定义要重复的字符类时,尽可能精确是一个很好的实践。这有助于防止catastrophic backtracking。因此,我将使用[^<]*而不是.*?,它现在可以在最后一个标记之后找到离群字符。这将不再需要re.DOTALL标志,因为[^<]确实与换行符匹配。在

相关问题 更多 >