标题: [文本处理] [已解决]批处理怎样间断提取文本中的汉字? [打印本页]
作者: 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
- sed -i "s/[0-9a-zA-Z]//g" a.txt
复制代码
作者: batman 时间: 2011-4-20 12:23
本帖最后由 batman 于 2011-4-20 12:27 编辑
仅是一种方法:- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (a.txt) do set "str=%%a"&call :lp
- pause>nul&goto :eof
- :lp
- for /f "tokens=1* delims=0123456789abcdefghijklmnopqrstuvwxyz" %%a in ("%str%") do (
- set "var=!var!%%a"
- if "%%b" neq "" set "str=%%b"&goto lp
- )
- 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 版本差异还是比较明显的。- sed "s/[^\x80-\xff]//g" urfile
复制代码
作者: escortmnm 时间: 2011-4-20 12:30
首先感谢楼上两位bat人的热心帮助。
sed命令确实是个办法,但是xp下面都没有,所以应用性不好。
batman 给的连接中使用了逐位判断外的另一种方式,就是将不满意的替换掉,确实是个好办法,再次感谢。
我考虑到用for/F解析怎么样,代码示例:- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (abc.txt) do (
- set n=%%i
- for /f "tokens=1-20,* delims=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" %%a in ("!n!") do (
- echo %%a%%b%%c%%d%%e%%f%%g%%h%%i!e!>>new_abc.txt)
- )
- 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=%
收工
演示代码:- 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 |