标题: [文本处理] [已解决]批处理如何大量指定删除和正规表达替换? [打印本页]
作者: bankouyan 时间: 2020-3-27 01:35 标题: [已解决]批处理如何大量指定删除和正规表达替换?
本帖最后由 bankouyan 于 2020-3-28 02:41 编辑
原文格式:
《明风八万里》
作者:紫钗恨
内容简介:
1644年的金陵残照与越明中兴,且看我只手再造乾坤
第一章 诚意伯府
“正文”
第二章 托梦
“正文”
第三章 枣桃
“正文”
想实现效果如下:
###第一章 诚意伯府
“正文”
###第二章 托梦
“正文”
###第三章 枣桃
“正文”
### <----这个是在文本最后一行加入
PS:txt文件的大小不一,有些几十M,有些小几M,而且是大量的txt- @ECHO OFF
- SET TxtDir="C:\Users\Administrator\Desktop\新建文件夹\新建文件夹 (2)"
- SET /A N=5
- ECHO 开始操作,请稍后...
- CD /D %TxtDir%
- ::.txt为文件类型
- FOR /F "tokens=1 delims=" %%I IN ('DIR /A /B *.txt') DO ((MORE +%N% "%%I">"%%I_")&(DEL /A /F /Q "%%I")&(REN "%%I_" "%%I"))
- ECHO 操作结束
- PAUSE
复制代码
目前有以上脚本删除以下内容,用删除前几行的方法,但是效果不怎么好! (单文件处理效果还行,多文件就不行了.)
《明风八万里》
作者:紫钗恨
内容简介:
1644年的金陵残照与越明中兴,且看我只手再造乾坤
第一章替换成 ###第一章 的正规表达
(第[零一二三四五六七八九十百千万两|0-9]*[章回节])
###$1
试过用findstr,没成功
能对这几百个文件一次性处理。谢谢各位老师。
作者: netdzb 时间: 2020-3-27 09:37
建议用python处理这样复杂的东西。
作者: netdzb 时间: 2020-3-27 10:28
本帖最后由 netdzb 于 2020-3-27 10:30 编辑
回复 1# bankouyan
我没看出来你用什么语法匹配 第* 章的语法。
python的中文匹配我也不会,一起学习一下。
作者: bankouyan 时间: 2020-3-27 11:26
回复 3# netdzb
用Notepad++这个软件正规表达可以批量处理第*章但是要手动!
作者: bankouyan 时间: 2020-3-27 11:30
回复 2# netdzb
python不会写,反而会一点点shell脚本,但是只能处理单个文件,不懂得批量.
作者: netdzb 时间: 2020-3-27 14:15
回复 5# bankouyan
你能把这个正则搞定吗?
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
str = '''TITLE "Leslie Cheung 张国荣 LPCD45"
PERFORMER "张国荣"
REM DATE "2008"
REM DISCID E3103E10
FILE "Leslie Cheung 张国荣 LPCD45.flac" WAVE
TRACK 01 AUDIO
TITLE "奔向未来日子"
PERFORMER "张都荣"
REM COMMENT "[www.pt80.net]"
INDEX 01 00:00:00'''
print re.sub('张*荣','图片',str)
我想把张国荣,张都荣替换成图片,运行后并没有替换。
这个问题搞定了,你的问题也搞定一半了。
作者: bankouyan 时间: 2020-3-27 17:24
回复 bankouyan
你能把这个正则搞定吗?
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import ...
netdzb 发表于 2020-3-27 14:15
张国荣 (包含英文名+数字+中文混合)
正规表达
[A-Za-z0-9_\-\u4e00-\u9fa5]+
图片 带有网址路径
正规表达
[a-zA-z]+://[^\s]*
作者: netdzb 时间: 2020-3-27 20:30
回复 7# bankouyan
python2好像跑步通,python3还没用过,有空试验一下。
作者: wxyz0001 时间: 2021-5-21 23:46
- import re
-
- with open('E:\\news\\基督山伯爵.txt', 'r+', encoding='gbk') as f:
- data = f.read()
- match = re.sub(r'\n\s?第', '\n###第', data)
- with open('E:\\news\\###基督山伯爵.txt', 'w') as ff:
- ff.write(match + '\n' + '###')
复制代码
作者: xp3000 时间: 2021-5-22 11:02
文件ANIS编码,防重复处理- //&cls&dir /b *.txt|cscript -nologo -e:jscript "%~f0"&pause&exit
-
- function reStr(file){
- var f = fso.opentextfile(file, 1);
- str = f.ReadAll().replace(/^\s*(第[一二两三四五六七八九十○零百千0-9][节章])/gm, '###$1')
- .replace(/^\s*#+$/gm, '').replace(/^([\S\s]+)(\r\n)*$/gm, '$1\r\n\r\n###');
- f.Close();
- var f = fso.opentextfile(file, 2);
- f.Write(str);
- }
- var fso = new ActiveXObject('Scripting.FileSystemObject');
- while(!WScript.StdIn.AtEndOfStream)reStr(WScript.StdIn.ReadLine());
复制代码
大文件最好用EmEditor
^\s*(第[一二两三四五六七八九十○零百千0-9][节章])替换###$1
作者: qixiaobin0715 时间: 2021-5-22 13:11
本帖最后由 qixiaobin0715 于 2021-5-22 13:14 编辑
如果EmEditor处理多个文件的话,可使用宏文件。将下列代码存为.jsee文件,编码使用UTF16LE有签名。可处理指定文件夹及子文件夹中的文本文件。在要处理的文件夹中的用EE打开其中任意一个文本文件,在菜单中运行上面保存的宏文件即可。但是要慎用,不可逆,使用之前请提前备份好源文件。- editor.ReplaceInFiles( "^\\s*(第[一二两三四五六七八九十○零百千0-9]+[节章])","###\\1",document.Path + "\\*.txt", eeFindRecursive | eeFindReplaceRegExp ,eeEncodingSystemDefault, "","");
复制代码
作者: 1152 时间: 2021-5-22 13:28
回复 11# qixiaobin0715
为什么感觉这个命令非常危险
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |