Board logo

标题: [文本处理] [已解决]批处理如何大量指定删除和正规表达替换? [打印本页]

作者: bankouyan    时间: 2020-3-27 01:35     标题: [已解决]批处理如何大量指定删除和正规表达替换?

本帖最后由 bankouyan 于 2020-3-28 02:41 编辑

原文格式:

《明风八万里》
作者:紫钗恨
内容简介:
    1644年的金陵残照与越明中兴,且看我只手再造乾坤

第一章 诚意伯府
    “正文”

第二章 托梦
    “正文”

第三章 枣桃
    “正文”

想实现效果如下:

###第一章 诚意伯府
    “正文”

###第二章 托梦
    “正文”

###第三章 枣桃
    “正文”

###     <----这个是在文本最后一行加入

PS:txt文件的大小不一,有些几十M,有些小几M,而且是大量的txt
  1. @ECHO OFF
  2. SET TxtDir="C:\Users\Administrator\Desktop\新建文件夹\新建文件夹 (2)"
  3. SET /A N=5
  4. ECHO 开始操作,请稍后...
  5. CD /D %TxtDir%
  6. ::.txt为文件类型
  7. FOR /F "tokens=1 delims=" %%I IN ('DIR /A /B *.txt') DO ((MORE +%N% "%%I">"%%I_")&(DEL /A /F /Q "%%I")&(REN "%%I_" "%%I"))
  8. ECHO 操作结束
  9. 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

  1. import re
  2. with open('E:\\news\\基督山伯爵.txt', 'r+', encoding='gbk') as f:
  3.     data = f.read()
  4.     match = re.sub(r'\n\s?第', '\n###第', data)
  5.     with open('E:\\news\\###基督山伯爵.txt', 'w') as ff:
  6.         ff.write(match + '\n' + '###')
复制代码

作者: xp3000    时间: 2021-5-22 11:02

文件ANIS编码,防重复处理
  1. //&cls&dir /b *.txt|cscript -nologo -e:jscript "%~f0"&pause&exit
  2. function reStr(file){
  3.     var f = fso.opentextfile(file, 1);
  4.     str = f.ReadAll().replace(/^\s*(第[一二两三四五六七八九十○零百千0-9][节章])/gm, '###$1')
  5.     .replace(/^\s*#+$/gm, '').replace(/^([\S\s]+)(\r\n)*$/gm, '$1\r\n\r\n###');
  6.     f.Close();
  7.     var f = fso.opentextfile(file, 2);
  8.     f.Write(str);
  9. }
  10. var fso = new ActiveXObject('Scripting.FileSystemObject');
  11. 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打开其中任意一个文本文件,在菜单中运行上面保存的宏文件即可。但是要慎用,不可逆,使用之前请提前备份好源文件。
  1. 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