Board logo

标题: [文本处理] [已解决]批处理如何提取文本内的指定内容? [打印本页]

作者: zjw767676    时间: 2016-2-17 22:18     标题: [已解决]批处理如何提取文本内的指定内容?

本帖最后由 zjw767676 于 2016-2-18 18:18 编辑

需要提取index.txt中的“/dushi/20150506/1237296.html”之类的输入到1.txt:
  1. * 其他类型</book/qita/>
  2.   * 全本小说</change/quanben/>
  3.   *
  4. 加入书签 | 推荐本书 | 返回书页</book/dushi/1844/> | 我的书架 | 手机阅读<http://m.7ddw.com/chapter/dushi/1844/>
  5. 顶点小说<http://www.7ddw.com> -> 都市言情</book/dushi/> -> 重生之财色天下</book/dushi/1844/>
  6.   
  7. 重生之财色天下 最新章节更新列表
  8.   
  9. 重生之财色天下作者:天下第一白
  10.   
  11. 第1章 :梦回2000</dushi/20150506/1237296.html> 第2章 :三大门户网站都不赚钱</dushi/20150506/1237297.html> 第3章 :那些年,我们追过的女孩</dushi/20150506/1237298.html> 第4章 :指点丁磊</dushi/20150506/1237299.html>
  12. 第5章 :五张模拟试卷</dushi/20150506/1237300.html> 第6章 :熊猫烧香</dushi/20150506/1237301.html> 第7章 :试探张宁</dushi/20150506/1237302.html> 第8章 :病毒发威</dushi/20150506/1237303.html>
复制代码
我的代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=^<^> tokens=1-8" %%a in (index.txt) do (
  3. set a=%%a
  4.   set b=%%b
  5.      set c=%%c
  6.         set d=%%d
  7.            set e=%%e
  8.               set f=%%f
  9.                  set g=%%g
  10.                    set h=%%h
  11. set /a "1/!a:~-11,-5!" 2>nul && echo,%%a
  12. set /a "1/!b:~-11,-5!" 2>nul && echo,%%b
  13. set /a "1/!c:~-11,-5!" 2>nul && echo,%%c
  14. set /a "1/!d:~-11,-5!" 2>nul && echo,%%d
  15. set /a "1/!e:~-11,-5!" 2>nul && echo,%%e
  16. set /a "1/!f:~-11,-5!" 2>nul && echo,%%f
  17. set /a "1/!g:~-11,-5!" 2>nul && echo,%%g
  18. set /a "1/!h:~-11,-5!" 2>nul && echo,%%h
  19. ))1.txt
复制代码
代码不足之处:不简练,会产生空行。请指教!!!
作者: WHY    时间: 2016-2-17 23:08

  1. @echo off
  2. for /f "tokens=2,4,6,8 delims=<>" %%i in ('findstr /i "[0-9]\.html" index.txt') do (
  3.     echo;%%i
  4.     echo;%%j
  5.     echo;%%k
  6.     echo;%%l
  7. )
  8. pause
复制代码

作者: ivor    时间: 2016-2-17 23:34

本帖最后由 ivor 于 2016-2-18 00:16 编辑

回复 1# zjw767676

python比cmd控制台兼容性好,代码也少,越复杂会越明显。
  1. # python 3.5.1
  2. # coding:utf-8
  3. import re
  4. try:
  5.     with open(r"d:\desk\bat\test.html", "r") as file:
  6.         for lines in file.readlines():
  7.             data = re.findall(r"<(.+?)>",lines)
  8.             for i in data:
  9.                 print(i)
  10. except:
  11.     print("出现问题了,去www.bathome.net反馈")
  12.     input("回车退出...")
  13. input("回车退出...")
复制代码

作者: 依山居    时间: 2016-2-18 00:39

本帖最后由 依山居 于 2016-2-18 00:44 编辑

正则表达式
  1. 第\d+章.*?<(.*?)>
复制代码
这样可能更严谨点
  1. 第\d+章.*?<(.*?\.html)>
复制代码

作者: 依山居    时间: 2016-2-18 08:53

  1. """
  2. 2016年2月18日 08:20:03 codegay
  3. """
  4. import re
  5. url=re.findall(r"<(/dushi/\d+/\d+.html)>",open("提取指定文本.py",encoding="utf-8").read())
  6. [print(r,file=open("result.txt","a+")) for r in url]
  7. """
  8. * 其他类型</book/qita/>
  9.   * 全本小说</change/quanben/>
  10.   *
  11. 加入书签 | 推荐本书 | 返回书页</book/dushi/1844/> | 我的书架 | 手机阅读<http://m.7ddw.com/chapter/dushi/1844/>
  12. 顶点小说<http://www.7ddw.com> -> 都市言情</book/dushi/> -> 重生之财色天下</book/dushi/1844/>
  13.   
  14. 重生之财色天下 最新章节更新列表
  15.   
  16. 重生之财色天下作者:天下第一白
  17.   
  18. 第1章 :梦回2000</dushi/20150506/1237296.html> 第2章 :三大门户网站都不赚钱</dushi/20150506/1237297.html> 第3章 :那些年,我们追过的女孩</dushi/20150506/1237298.html> 第4章 :指点丁磊</dushi/20150506/1237299.html>
  19. 第5章 :五张模拟试卷</dushi/20150506/1237300.html> 第6章 :熊猫烧香</dushi/20150506/1237301.html> 第7章 :试探张宁</dushi/20150506/1237302.html> 第8章 :病毒发威</dushi/20150506/1237303.html>
  20. """
复制代码

作者: WHY    时间: 2016-2-18 11:51

按照顶楼代码的意思,楼主应该是想匹配 .html 前面的7位数字
另外,如果不确定文本编码类型,可以考虑用 PowerShell
  1. $ar = type index.txt | %{
  2.     [regex]::Matches($_, '<(/.+?/\d{7}\.html)>', 'IgnoreCase') | %{$_.Groups[1].Value}
  3. }
  4. Out-File 1.txt -Input $ar -Encoding utf8
复制代码

作者: zjw767676    时间: 2016-2-18 18:17

回复 2# WHY

这就是我想要的,下载小说用的提取各章节的地址!
"<>"不需转义也可用!!!!!受教了!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2