标题: [文本处理] 【已解决】批处理如何删除文本所有格式,只保留汉字? [打印本页]
作者: 屡败屡战 时间: 2018-7-28 16:19 标题: 【已解决】批处理如何删除文本所有格式,只保留汉字?
本帖最后由 屡败屡战 于 2018-7-29 20:07 编辑
本人要处理大量的文档,要求将文档内容里的所有格式、换行符、回车符、空格、标点符号、数字、英文字母等等,一切全部删除,只保留汉字即可。不知能否实现??
作者: cfwyy77_bat 时间: 2018-7-28 22:30
可以试试用正则表达式,直接匹配出汉字。可以选择支持\p 正则的 语言或工具。 Perl,PHP, Ruby等 应该支持。python不支持。
我用了grep- grep -Po '\p{Han}+' 1.txt >2.txt
复制代码
作者: 屡败屡战 时间: 2018-7-28 23:07
好像正是我想要的,问下,如何处理大量文本呢?
作者: codegay 时间: 2018-7-28 23:50
回复 2# cfwyy77_bat
更强大的python正则表达式模块 -- regex
https://www.cnblogs.com/gayhub/p/6354097.html
作者: 屡败屡战 时间: 2018-7-29 00:16
我电脑没安装python3,我下载试试,以前没用过这个。
作者: cfwyy77_bat 时间: 2018-7-29 09:00
回复 4# codegay
对对,谢谢大佬提醒,我应该说python的标准正则库re 不支持。
作者: cfwyy77_bat 时间: 2018-7-29 09:02
回复 3# 屡败屡战
先搞定单个文本,多个你再自由发挥好了
作者: codegay 时间: 2018-7-29 11:06
回复 6# cfwyy77_bat
好多工具的正则不支持{han}这样的表达式,比如notepad++,notepad2-mod,还有python,但是支持\u来匹配unicode的范围。
所以可以用\u来匹配中文的unicode范围。
作者: codegay 时间: 2018-7-29 11:22
正则用\w把字符滤出来,然后再滤掉数字和字母。就可以得到楼主想要的结果了。
作者: WHY 时间: 2018-7-29 12:21
- PowerShell -c "dir *.txt | ForEach{$str=(type $_) -join '' -replace '[^\u3400-\u9FFF]+'; sc ($_.Name+'.Log') -value $str}"
复制代码
- @if(0)==(0) echo off
- dir /b *.txt | cscript //nologo //e:jscript "%~f0"
- pause & goto :EOF
- @end
-
- var fso = new ActiveXObject('Scripting.FileSystemObject');
-
- while(!WSH.StdIn.AtEndOfStream){
- var strFile = WSH.StdIn.ReadLine();
- var str = fso.OpenTextFile(strFile, 1).ReadAll().replace(/[^\u3400-\u9FFF]+/g, '');
- fso.OpenTextFile(strFile + '.Log', 2, 1).Write(str);
- }
复制代码
参考:中日韩统一表意文字字符集范围
作者: Batcher 时间: 2018-7-29 13:00
回复 3# 屡败屡战
可以用 for + grep 处理大量文件
作者: codegay 时间: 2018-7-29 20:39
WHY用的范围可太大了。
https://www.cnblogs.com/chenwenb ... /08/17/2142718.html
我搜索到多是用0x4E00~0x9FA5
一部分是9FBF
作者: WHY 时间: 2018-7-29 23:20
回复 12# codegay
是的,\u3400-\u4DBF 属于扩展A区,一般用不到,加不加基本没有区别。
CJK Unified Ideographs 在 .NET 正则中的区间是 \u4E00-\u9FFF,也就是 \p{IsCJKUnifiedIdeographs}
参考:https://docs.microsoft.com/zh-cn ... regular-expressions
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |