Board logo

标题: [文本处理] [已解决]批处理怎样间断提取文本中的汉字? [打印本页]

作者: escortmnm    时间: 2011-4-20 11:51     标题: [已解决]批处理怎样间断提取文本中的汉字?

文本内容:
中华12345人民afdvf共avfdvavfddv和vdfaszvfd国万岁
世asdvc43界h5e6gh人eh5r3民h66r5大团结mr56md万岁
……………………………………………………………………
……………………………………………………………………


类似这样的行有很多,规律就是汉字之间夹杂数字与字母,夹杂的数字与字母位数都随机。
怎么提取这些汉字,得到“中华人民共和国万岁”。

说明:
我会用逐位判断的方式提取,但是这个方法太麻烦,如何使用更简单的方法获取呢?

期待朋友们的帮助!
作者: batman    时间: 2011-4-20 12:01

请楼主参考此贴:
http://www.bathome.net/thread-11962-1-2.html
作者: Batcher    时间: 2011-4-20 12:16

  1. sed -i "s/[0-9a-zA-Z]//g" a.txt
复制代码

作者: batman    时间: 2011-4-20 12:23

本帖最后由 batman 于 2011-4-20 12:27 编辑

仅是一种方法:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do set "str=%%a"&call :lp
  3. pause>nul&goto :eof
  4. :lp
  5. for /f "tokens=1* delims=0123456789abcdefghijklmnopqrstuvwxyz" %%a in ("%str%") do (
  6.      set "var=!var!%%a"
  7.      if "%%b" neq "" set "str=%%b"&goto lp
  8. )
  9. echo !var!&set "var="
复制代码

作者: asnahu    时间: 2011-4-20 12:23

本帖最后由 asnahu 于 2011-4-20 12:25 编辑

GNU sed 4.2 版本对于 “a-zA-Z0-9” 这条正则处理有问题,看来 sed 版本差异还是比较明显的。
  1. sed "s/[^\x80-\xff]//g" urfile
复制代码

作者: escortmnm    时间: 2011-4-20 12:30

首先感谢楼上两位bat人的热心帮助。
sed命令确实是个办法,但是xp下面都没有,所以应用性不好。
batman 给的连接中使用了逐位判断外的另一种方式,就是将不满意的替换掉,确实是个好办法,再次感谢。
我考虑到用for/F解析怎么样,代码示例:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (abc.txt) do (
  4. set n=%%i
  5. for /f "tokens=1-20,* delims=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" %%a in ("!n!") do (
  6. echo %%a%%b%%c%%d%%e%%f%%g%%h%%i!e!>>new_abc.txt)
  7. )
  8. pause
复制代码
但是这个方法对付分割数目少的可以,对付多的就实现不了了,请问怎么判断for里面到底需要多少个参数?
作者: batman    时间: 2011-4-20 12:37

6# escortmnm
分割多的见4楼。。。
作者: escortmnm    时间: 2011-4-20 13:54


膜拜!
我怎么就没想到呢,还是高手厉害。感谢你!
学习了。
作者: namejm    时间: 2011-4-20 17:55

如果只夹杂了字母和数字的话,何须那么多loop?
把26个字母和10个数字放到 for 中,然后字符串替换:set str=%str:var1=%
收工
演示代码:
  1. for %%i in (0 1 2  …… 9 a b c  ……z) do set "str=!str:%%i=!"
复制代码

作者: batman    时间: 2011-4-20 17:57

9# namejm
替换的方法,我在楼上给出了链接,老大。。。
作者: namejm    时间: 2011-4-20 18:29

呵呵,没去点那个链接,失误失误。




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