【求助】正则如何查找未匹配的闭合标签

正确的标签如图1


匹配错了的如图2

还有一种情况是无闭合标签,中文部分之后是空格、英文句子或标点符号之类的。
请问要找出那些不匹配的闭合的标签或遗漏掉的闭合标签,在Emeditor里正则查找该如何写?
这里先谢过了。

用其他工具吧,好像论坛里有提到过

要闭合就用bs4读取再保存就行了,但是准确性上别做太多指望

1 个赞

看过去一堆的错误,如何是正确的?

建议使用Tidy

1 个赞

@mdxfan @atauzki @Vim 谢谢三位回复。看来正则无指望,就不再捣鼓了。

1 个赞

这个,大概有个方向。
汉字+标点+标签。

查找 ([\x{4e00}-\x{9fff},。?:;‘’“”、`!……——()]+)(错误标签)
替换 \1正确标签
1 个赞

这是我看了 牛津中阶双解【CSS】2019.12.12
按照其标签和css做的一次尝试。说好听一点,没学到家,难听点,学坏了。原文本来源于《史氏汉英翻译大词典》图片词典制作记录帖子--完成版已发布
那儿鄙人有几个相关贴子。现在提供几个词条,如果您有时间,麻烦您看看并给予指导。
请帮忙.txt (13.1 KB)

其实,你大可直接把中文英文标签删除,
然后重新匹配汉字,加上新标签。

谢谢!本来想弄懂这个问题,在网上耗费了很多时间。在网上看到的也是两种处理方式,一、绕道,二、举例。举例的本人都试了,要么报错要么不是需要的结果。主要还是本人水平很低,所以现在只想直接获取答案。没有更多时间去捣鼓了。

要闭合标签找我啊。

1 个赞

兄台的工具确实强大哈,推荐。

不过对有的嵌套位置问题判定过于严格,如<a><b><c><d></b></d></c></a>
会报4条错误。

手工改正,只要把</b>后挪一下就可消除这4条错误。

1 个赞

请问在哪儿?

写得很简陋,还有很多问题,有需要可以把文本文件发我。标签错误的行号列号,会给你标注出来。

1 个赞

@jcz777 请教下,为什么你要用正则引擎Onigmo的格式 [\x{4e00}-\x{9fff}],缺省引擎的格式 [\u4e00-\u9fff] 不是更好吗?有什么说法?

1 个赞

为了能匹配扩展区汉字。

默认的boost regex引擎做不到,只能换Onigmo了。

Emeditor汉字匹配
注意:重要一个,正则表达式引擎修改为:Onigmo。


基本汉字	[\x{3007}\x{4e00}-\x{9fff}]
扩展A区	[\x{3400}-\x{4DBF}]
扩展B区	[\x{20000}-\x{2A6DF}]
扩展C区	[\x{2A700}-\x{2B73F}]
扩展D区	[\x{2B740}-\x{2B81F}]
扩展E区	[\x{2B820}-\x{2CEA1}]
扩展F区	[\x{2CEB0}-\x{2EBE0}]
扩展G区	[\x{30000}-\x{3134A}]
兼容	[\x{F900}-\x{FAD9}]
兼容扩展	[\x{2F800}-\x{2FA1D}]
部首扩展	[\x{2E80}-\x{2EF3}]
注音	[\x{3105}-\x{312F}]
笔画	[\x{31C0}-\x{31E3}]
康熙部首	[\x{2F00}-\x{2FD5}]
注音扩展	[\x{31A0}-\x{31BA}]
私用SSP	[\x{E000}-\x{F8FF}]
私用PUA-A	[\x{F0000}-\x{FFFFF}]
私用PUA-B	[\x{100000}-\x{10FFFF}]
3 个赞

就是说,如果选默认的boost regex引擎,用这个式子 [\u4e00-\u9fff] 也搜不到扩展区汉字?这就不太好理解了,不是 4e00~9fff 区间对了就能匹配到吗?

我的理解,不同引擎的差别只是写法不同,\x{4e00} \u4e00,难道还有别的不同?

2 个赞

基本区汉字4e00-9fff有20992个汉字,一般来说,用这个范围就可以了。
但是经常会碰到扩展区的汉字,boost regex就匹配不了。
(最常用的新华字典都有一百多个B区汉字)

1 个赞

谢谢解答!还是不太理解这两个引擎为什么会有这个差别。

EmEditor用扩展A区第一个字“㐀”试验发现:

  • 缺省引擎 \u3400 搜不到
  • 缺省引擎 \x{3400} 可以搜到
  • Onigmo引擎 \u3400 可以搜到
  • Onigmo引擎 \x{3400} 可以搜到

根据这个网页的介绍,Onigmo引擎下匹配所有汉字可以用 \p{Han},刚试了下 “㐀” 这个字是可以匹配到的
<>EmEditor v15.7.0 beta 1 – EmEditor (Text Editor)<>

使用\p{Han},需要考虑词典文本字符覆盖的范围。Unicode已经更新到15, 而Onigmo目前只支持到Unicode 12,也就是说对于13-15的汉字,用\p{Han},是匹配不到的。

4 个赞

谢谢!<><><>