标题: [问题求助] VBS正则表达式修改与替换,提取与分割文件怎么写? [打印本页]
作者: xp3000 时间: 2015-5-25 14:56 标题: VBS正则表达式修改与替换,提取与分割文件怎么写?
下面有个TXT附件,和vbs放同一个目录,希望能通过VBS批量处理
选项1:正则表达式替换内容
请输入表达式:
替换(允许为空):
如果输入表达式(?:^|\r\n)(第[0-90-9一二三四五六七八九十两百千零〇]{1,12}[册集部卷章回节])([ ]?)(.{0,12})(?=\r\n)
替换值填写:$2 $4
能将第1章远古神墓
替换为第1章 远古神墓
这个希望如果替换值不些等于将匹配的删除
选项2:正则表达式提取内容
请输入表达式:(?:^|\r\n)第[0-9 0-9一二三四五六七八九十两百千零〇]{1,12}[册集部卷章回节]([ ]?)(.{0,15})(?=\r\n)
目的:以正则表达式提取TXT文件章节名,提取后保存为 文件名+提取内容.TXT(附件提取的保存为:第一卷 走出神墓 提取内容.TXT),提取的内容如下
第1章 远古神墓
第2章 惊艳
第3章 小恶魔公主
……
选项3:正则表达式分割文件
请输入表达式:
这里如果输入表达式,(?:^|\r\n)第[0-90-9一二三四五六七八九十两百千零〇]{1,12}[册集部卷章回节]([ ]?)(.{0,15})(?=\r\n)
能按照要求分割文本,序号+章节名称
目的:以正则表达式提取TXT文件章节名,提取后以章节名保存为一章章的文本, 0001 第1章 远古神墓.TXT,0002 第2章 惊艳.TXT……
选项4:自定义功能
这个选项选择后,进入子选项,可以对目录的TXT批量处理
自定义功能1:行首加空格
^([ \t]*)+
替换为中文空格两个
自定义功能2:规范第*章节和第**卷 第**章
^([ \t]*)([第]?)+[ ]?([一二两三四五六七八九十○零百千0-90-9]{1,9})([ ]?)([章节])([ ]?)+
替换第$3$5
^([ \t]*)([第]?)+([一二两三四五六七八九十○零百千0-90-9]{1,9})([册集部卷])[ ]?([第]?)+([一二两三四五六七八九十○零百千0-90-9]{1,9})([章回节])([ ]?)+
替换第$3$4 第$6$7
自定义功能3:删除空行和去除空格
^[ \t]*\n
替换值为空
[ \t]+$
替换值为空
作者: xp3000 时间: 2015-6-1 00:05
- Set fso = CreateObject("Scripting.FileSystemObject")
- For Each f in fso.GetFolder(".").Files
- ext = LCase(fso.GetExtensionName(f))
- If ext = "txt" Then
- txt = fso.OpenTextFile(f).ReadAll
- fso.OpenTextFile(f & ".txt", 2, true).Write GetUrl(txt)
- End If
- Next
- MsgBox "OK"
-
- Function GetUrl(str)
- Set re = New RegExp
- re.Pattern = "(?:^|\r\n)(第[一二两三四五六七八九十○零百千\d]{1,9}[章节回])\s?(.{0,15}?)(?=\r\n)"
- re.Global = True
- re.IgnoreCase = True
- For Each m in re.Execute(str)
- If InStr(s, m & vbCrLf) = 0 Then s = s & m & vbCrLf
- Next
- GetUrl = s
- End Function
复制代码
"^(第[一二两三四五六七八九十○零百千0-90-9]{1,9}章)[]?(.{0,12})$"这样不能,
^行首和$行尾不能匹配,还有上面的如果不提取只替换$2 $3怎么写?还有就是以正则表达式分割了.
另外一条([\s\t]*)如果没空字符可以删除,或将集册部卷章节回那部分合并。
(?:^|[\r\n])([\s\t]*)(第[一二两三四五六七八九十○零百\d]{1,5}[集册部卷])?\s?(第[一二两三四五六七八九十○零百千\d]{1,9}[章节回])\s?(.{0,15}?)(?=[\r\n])
ebookPK里面的,也可以用在里面(第(?:[^第\n\r 章节回 ]+)[章节回])([\n\r]|([\.\s](?:[^第\n\r]+)[第 \n\r ]))
有谁会写按这样分割文件的vbs?
作者: yu2n 时间: 2015-6-1 11:42
回复 2# xp3000
你都把答案写在题目里面了,正则表达式也写出来了,批量替换应该没有什么问题吧?
如果是想问文件分割,可以考虑按大小+行符号来分割。
作者: xp3000 时间: 2015-6-1 18:33
本帖最后由 xp3000 于 2015-6-3 09:02 编辑
说真的还真不会,平时只在软件里面用正则表达式折腾,下面替换的怎么一次处理两条替换?有没有可以优化的地方?
^起始位置和$结束位置在这里真不知道怎么弄- Dim str, fso, file, f, txt
- Set fso = CreateObject("Scripting.FileSystemObject")
- For Each file in fso.GetFolder(".").Files
- If LCase(Right(file, 4)) = ".txt" Then
- Set f = fso.OpenTextFile(file, 1)
- txt = f.ReadAll
- f.Close : Set f = Nothing
- fso.OpenTextFile(file, 2).Write RegEx(txt)
- End If
- Next
- Set fso = Nothing
-
- MsgBox "OK"
-
- Function RegEx(txt)
- Set re = New RegExp
- re.Pattern = "第?(第[一二两三四五六七八九十○零百千0-9]{1,9})(章|节|卷)\s?(.{0,15})(?=[\r\n])"
- re.Global = True
- re.IgnoreCase = True
- RegEx = re.Replace(txt, "$1$2 $3")
- End Function
复制代码
作者: yu2n 时间: 2015-6-3 20:49
试试:复制代码
据说 VBS 处理文本的效率不高,你可以试试逐行处理。
作者: xp3000 时间: 2015-6-7 00:16
只能等高手用正则表达式分割TXT了
(?:^|\r\n)(第[一二两三四五六七八九十○零百千\d]{1,9}[章节回])\s?(.{0,15}?)(?=\r\n)
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |