其实,你大可直接把中文英文标签删除,
然后重新匹配汉字,加上新标签。
谢谢!本来想弄懂这个问题,在网上耗费了很多时间。在网上看到的也是两种处理方式,一、绕道,二、举例。举例的本人都试了,要么报错要么不是需要的结果。主要还是本人水平很低,所以现在只想直接获取答案。没有更多时间去捣鼓了。
要闭合标签找我啊。
兄台的工具确实强大哈,推荐。
不过对有的嵌套位置问题判定过于严格,如<a><b><c><d></b></d></c></a>
会报4条错误。
手工改正,只要把</b>
后挪一下就可消除这4条错误。
请问在哪儿?
写得很简陋,还有很多问题,有需要可以把文本文件发我。标签错误的行号列号,会给你标注出来。
为了能匹配扩展区汉字。
默认的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}]
就是说,如果选默认的boost regex引擎,用这个式子 [\u4e00-\u9fff] 也搜不到扩展区汉字?这就不太好理解了,不是 4e00~9fff 区间对了就能匹配到吗?
我的理解,不同引擎的差别只是写法不同,\x{4e00} \u4e00,难道还有别的不同?
基本区汉字4e00-9fff有20992个汉字,一般来说,用这个范围就可以了。
但是经常会碰到扩展区的汉字,boost regex就匹配不了。
(最常用的新华字典都有一百多个B区汉字)
谢谢解答!还是不太理解这两个引擎为什么会有这个差别。
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}
,是匹配不到的。
谢谢!<><><>
多谢!暂时还不需要,期盼大作早日完善。
Onigmo,H区也是可以匹配到的。
[\x{31350}-\x{323af}]
我们说的不是一回事啊,你用\p{Han}
能匹配H区的汉字?
0.0.
呵,没看仔细。确实。
非常感谢各位的鼎力相助,热情回复,受益匪浅。
确实如 atauzki 所说,bs4会自动修复非闭合的标签
#测试1
>>> from bs4 import BeautifulSoup
>>> t = '<span class="ex"> <span class="ch">👉灯一下又亮了。<en> </span> <span class="en">After a while the lights went on again.<en> </span> <ex> </span>'
>>> BeautifulSoup(t).find(class_='ex')
<span class="ex"> <span class="ch">👉灯一下又亮了。<en> </en></span> <span class="en">After a while the lights went on again.<en> </en></span> <ex> </ex></span>
#测试2
>>> t = '<span class="ex"> <span class="ch">👉灯一下又亮了。<span class="en">After a while the lights went on again.'
>>> BeautifulSoup(t).find(class_='ex')
<span class="ex"> <span class="ch">👉灯一下又亮了。<span class="en">After a while the lights went on again.</span></span></span>
bs4的修复逻辑不一定符合你的要求
#测试3
>>> t = '<span class="ex"> <span class="ch">👉灯一下又亮了。<en> <span class="en">After a while the lights went on again.<en> </span> <ex> </span>'
>>> BeautifulSoup(t).find(class_='ex')
<span class="ex"> <span class="ch">👉灯一下又亮了。<en> <span class="en">After a while the lights went on again.<en> </en></span> <ex> </ex></en></span></span>
最好先找找有没有更靠谱的数据源,以免白做工
我以前用emeditor的时候,会用这种方法从里到外一层一层剥掉标签,
添加到批处理里面,一般执行十几次就可以,最后剩下的都是有问题的。(做这一步之前要先处理一下自闭合的标签)