[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 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]+$
替换值为空

  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. For Each f in fso.GetFolder(".").Files
  3.     ext = LCase(fso.GetExtensionName(f))
  4.     If ext = "txt" Then
  5.         txt = fso.OpenTextFile(f).ReadAll
  6.         fso.OpenTextFile(f & ".txt", 2, true).Write GetUrl(txt)
  7.     End If
  8. Next
  9. MsgBox "OK"
  10. Function GetUrl(str)
  11.     Set re = New RegExp
  12.     re.Pattern = "(?:^|\r\n)(第[一二两三四五六七八九十○零百千\d]{1,9}[章节回])\s?(.{0,15}?)(?=\r\n)"
  13.     re.Global = True
  14.     re.IgnoreCase = True
  15.     For Each m in re.Execute(str)
  16.         If InStr(s, m & vbCrLf) = 0 Then s = s & m & vbCrLf
  17.     Next
  18.     GetUrl = s
  19. 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?

TOP

回复 2# xp3000

你都把答案写在题目里面了,正则表达式也写出来了,批量替换应该没有什么问题吧?

如果是想问文件分割,可以考虑按大小+行符号来分割。
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

本帖最后由 xp3000 于 2015-6-3 09:02 编辑

说真的还真不会,平时只在软件里面用正则表达式折腾,下面替换的怎么一次处理两条替换?有没有可以优化的地方?
^起始位置和$结束位置在这里真不知道怎么弄
  1. Dim str, fso, file, f, txt
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. For Each file in fso.GetFolder(".").Files
  4.     If LCase(Right(file, 4)) = ".txt" Then
  5.         Set f = fso.OpenTextFile(file, 1)
  6.         txt = f.ReadAll
  7.         f.Close : Set f = Nothing
  8.         fso.OpenTextFile(file, 2).Write RegEx(txt)
  9.     End If
  10. Next
  11. Set fso = Nothing
  12. MsgBox "OK"
  13. Function RegEx(txt)
  14.     Set re = New RegExp
  15.     re.Pattern = "第?(第[一二两三四五六七八九十○零百千0-9]{1,9})(章|节|卷)\s?(.{0,15})(?=[\r\n])"
  16.     re.Global = True
  17.     re.IgnoreCase = True
  18.     RegEx = re.Replace(txt, "$1$2 $3")
  19. End Function
复制代码

TOP

试试:
  1. re.MultiLine = True
复制代码
VBS正则表达式对象的MultiLine属性
http://demon.tw/programming/vbs-regexp-multiline.html


据说 VBS 处理文本的效率不高,你可以试试逐行处理。
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

只能等高手用正则表达式分割TXT了
(?:^|\r\n)(第[一二两三四五六七八九十○零百千\d]{1,9}[章节回])\s?(.{0,15}?)(?=\r\n)

TOP

返回列表