在Notepad ++中使用正则表达式查找和替换标题标记

时间:2014-06-01 16:47:21

标签: html regex notepad++

有一本OCR扫描书,有一个工具可以将OCR的PDF转换为XML,但大多数XML标签都是错误的,因此还有另一种工具可以修复它。但我需要打破从<h1><h5>,1和1的界限。 1.1。 &安培; 1.1.1。因此很容易使用该工具重新标记。

XML代码如下所示:

`<h1>text</h1><h2>text</h3><h3>text</h3>"

1.text.2.text.3.text.1.1.text.1.1.1.text 

我需要在记事本++中使用正则表达式打破这样的界限。

<h1>text</h1>
<h2>text</h2>
<h3>text</h3>

1.text.
2.text.
3.text.

1.1.text.
1.1.1.text.

我使用</h1>\s*查找</h1>\n,但它只会中断h1个标记。我需要打破所有“H”标签和1.,2.,1.1。,1.1.1。标签也是。

2 个答案:

答案 0 :(得分:1)

冒着被投票的风险,我认为解析器可能会更好。在过去,当我必须管理类似的任务时,我会编写一个小脚本/程序来解析文件并根据需要重新编写它。首先解析xml,然后使用正则表达式重新格式化可能更容易实现目标。

答案 1 :(得分:0)

您可以使用此搜索并替换(如果您的h1,h2,...标签不包含其他标签)

search:  (?<!^)(<h[1-6][^<]*|(?<![0-9]\.)[0-9]+\.)
replace: \n$1

注意:如果您需要Windows换行符,则必须使用\n更改\r\n

模式细节:

(?<!^)   # not preceded by the begining of the string

(                         # open the capture group 1
    <h[1-6][^<]*          # <h, a digit between 1 to 6, all characters until 
                          # the next < (to skip all the content between
                          # h1, h2... tags) 
  |                     # OR
    (?<![0-9]\.)[0-9]+\.  # one or more digits and a dot not preceded by a digit
                          # and a dot 
)                         # close the capture group 1

$1是对捕获组1

的内容的引用