用于大型搜索和替换的正则表达式工具

标签 regex

我经常发现自己需要一个工具来:

在大文件中搜索多个多行正则表达式模式并使用反向引用替换它们。

我应该:

  1. 花 2 个小时为自己构建这样一个工具
  2. 使用某人已经构建的东西(请建议)
  3. 学习使用一种特别擅长此类事情的语言(Perl?)

示例
我有一个包含数千个条目的 xml 文档。大约有 100 个具有已知值字段的条目需要删除。我可以为每个条目构建一个正则表达式。除了值字符串部分之外,100 个条目的表达式相同。该工具要么需要能够对每个值循环一次,要么只需要在表达式中使用 100 个 OR 项 (|) 循环一次(这将是巨大的)。在本例中,我将匹配项替换为空白,但在其他情况下,我会重新格式化文本并重新插入值字段。

最佳答案

我认为你应该把这件事写在 Python 中。 python re图书馆很棒:

# get the re library
import re

# this is the line to process
xml_line = "<stuff><bad i_am_naughty=\"True\"></bad></stuff>"
# compile a regex 
exp = re.compile ("(.*)(<bad.*bad>)(.*)")
# run the regex on the line
match = exp.search (xml_line)
# print out the groups the regex found
print match.groups ()

注意您还可以使用python XML parsing libraries去掉你不想要的元素。使用 python XMl 解析简化了我在示例中忽略的一些复杂性(多行等)。代替 Python XML 解析示例此 question在 Python 中解析 XML 时有一些很好的答案。

关于用于大型搜索和替换的正则表达式工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/707952/

相关文章:

正则表达式在 Grep 中有效,但在 vim 中无效

c++ - 仅读取文本文件中的字母

php - 如何使用正则表达式通过 MySQL 查询返回记录?

java - 如何用 xml 包装(包围)java 匹配器组?

java - 在未知索引处的某些字符之间搜索子字符串

javascript - 什么时候编译 JavaScript 正则表达式文字

regex - 如何使正则表达式的一部分可选?

c - 我该如何解决 munmap_chunk() : invalid pointer on regfree(&regex)

c++ - IRC channel 正则表达式组合

ruby - 在 Ruby 中,如何删除字符串中的所有字符直到子字符串匹配?