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

[文本处理] [已解决]批处理怎样间断提取文本中的汉字?

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


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

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

期待朋友们的帮助!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

***共同提高***

TOP

  1. sed -i "s/[0-9a-zA-Z]//g" a.txt
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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="
复制代码
1

评分人数

***共同提高***

TOP

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

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

TOP

首先感谢楼上两位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里面到底需要多少个参数?

TOP

6# escortmnm
分割多的见4楼。。。
***共同提高***

TOP


膜拜!
我怎么就没想到呢,还是高手厉害。感谢你!
学习了。

TOP

如果只夹杂了字母和数字的话,何须那么多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=!"
复制代码
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

9# namejm
替换的方法,我在楼上给出了链接,老大。。。
***共同提高***

TOP

呵呵,没去点那个链接,失误失误。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

返回列表