Board logo

标题: [文本处理] [已解决]批处理如何提取网页中一对标签/标记符囊括起来的内容? [打印本页]

作者: lxningbat    时间: 2014-12-6 00:05     标题: [已解决]批处理如何提取网页中一对标签/标记符囊括起来的内容?

本帖最后由 pcl_test 于 2016-5-5 23:48 编辑

如有内容:

.....(省略).....">截取字段1</a><..(省略)..><...">截取字段2</a>.....(省略).....

怎么才能截取到内容:截取字段1  和 截取字段2  ?

特征就是   ">截取字段1</a>

使用for  set  截好像不太现实,中间有太多个  <  >  的符号。

请大神相助,谢谢。
作者: CrLf    时间: 2014-12-6 06:04

有没有跨行?单行长度会不会超过 8192 字符?
作者: DAIC    时间: 2014-12-6 10:44

把你的网页压缩一下传上来看看吧
作者: lxningbat    时间: 2014-12-6 16:40

回复 2# CrLf
没有跨行呢,也没有超最长行
作者: lxningbat    时间: 2014-12-6 16:49

回复 3# DAIC
已经获取要截取字符串的那一行了,那一行的格式就上面说的那样。
作者: CrLf    时间: 2014-12-6 19:50

举个栗子:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=.....(省略).....>截取字段1</a><..(省略)..><...>截取字段2</a>.....(省略)....."
  3. set lf=^
  4. for %%a in ("!lf!") do (
  5. set "tmpstr=!str:*截取字段1</a>=!"
  6. for /f "eol=* delims=" %%b in ("!tmpstr:>截取字段2</a>=%%~a*!") do echo %%b
  7. )
  8. pause
复制代码

作者: CrLf    时间: 2014-12-6 19:51

再举个栗子:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=.....(省略).....>截取字段1</a><..(省略)..><...>截取字段2</a>.....(省略)....."
  3. set "index=!str:*截取字段1</a>=!"
  4. set "length=!index:*>截取字段2</a>=!"
  5. echo !index!
  6. echo !length!
  7. call :strlen index index
  8. call :strlen length length
  9. echo !str:~-%index%,%length%!
  10. pause&exit /b
  11. :strlen <stringVarName> [retvar]
  12. :: 思路: 二分回溯联合查表法
  13. :: 说明: 所求字符串大小范围 0K ~ 8K;
  14. ::    stringVarName ---- 存放字符串的变量名
  15. ::    retvar      ---- 接收字符长度的变量名
  16. setlocal enabledelayedexpansion
  17. set "$=!%1!#"
  18. set N=&for %%a in (4096 2048 1024 512 256 128 64 32 16)do if !$:~%%a!. NEQ . set/aN+=%%a&set $=!$:~%%a!
  19. set $=!$!fedcba9876543210&set/aN+=0x!$:~16,1!
  20. endlocal&If %2. neq . (set/a%2=%N%)else echo %N%
复制代码

作者: lxningbat    时间: 2014-12-9 14:26

回复 7# CrLf


    谢谢 CrLf 的思路例子,已按照思路类似方法解决了。




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