使用RegEx可以将这种文本文档拆分为多个文本文档吗?

时间:2019-01-28 12:08:43

标签: regex text split

我想将一个大文本文档(.txt)拆分为多个。之前已经有人问过这个问题,但是我认为我需要一个特定的RegEx来完成此任务。

我尝试了几种“拆分”软件,但尚未找到令人满意的解决方案。文本文件是西班牙议会中的一堆辩论。案文分为政策倡议(我不确定这是否惯用),我想按倡议将其拆分成文档。

有趣的是,每个计划都以下一种形式具有自己的标题:

- DEL GRUPO PARLAMENTARIO CATALÁN (CONVERGÈNCIA I UNIÓ), REGULADORA DE LOS HORARIOS COMERCIALES. (Número de expediente 122/000004.)

- DEL DIPUTADO DON MARIANO RAJOY BREY, DEL GRUPO PARLAMENTARIO POPULAR EN EL CONGRESO, QUE FORMULA AL SEÑOR PRESIDENTE DEL GOBIERNO: ¿CÓMO VALORA USTED LOS PRIMEROS DÍAS DE SU GOBIERNO? (Número de expediente 180/000021.)

如您所见,每个标题都是大写的,它以减号开头,以XXX/XXXXXX.)(其中X是数字),点和右括号结尾。每个标题互不相同。我虽然做了一些RegEx来捕获这些特征,以便在这些辩论之间使用定界符,但是老实说,我不知道该怎么做。

理想的做法是选择标题和标题下的辩论,直到出现另一个标题,并以此作为新文件,因此最后,我可以在一个文件中包含带有标题和辩论的政策倡议。

那么,可以使用RegEx解决方案来做到这一点吗?我需要哪种软件?记事本++是否足够?

2 个答案:

答案 0 :(得分:2)

这是一次简单的Awk尝试。

awk '/^- DEL .+ \(Número de expediente [1-9][0-9]*\/[0-9]+\.\)$/ {
        if (p) close (p)
        p = sprintf("split%05i.txt", ++i) }
    { print > p }' inputfile.txt

您对“所有大写字母”的定义似乎都不是很明确,因此我作了一些欺骗;您可能需要调整我的假设。您的Awk可能不会轻易将É等识别为大写,也许还取决于您的语言环境。

答案 1 :(得分:1)

我建议此正则表达式匹配的标题:

^\-.+\d{3}\/\d{6}\.\)$

我假定标题总是与XXX/XXXXXX.),其中X是一个数位。

结束

您可以使用this tool进行测试,它还提供了有关语法的说明,并且可以导出某些编程语言的代码。

大多数文本编辑器在查找工具中都具有“ RegEx”选项,但是在某些用例中可能还不够。同样,几乎任何编程语言都可以使用RegEx。