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

[文本处理] 这样奇葩的文本批处理能搞定吗?

假设有一文本存放了一批邮箱与昵称,但因为是多人输入帖子回复里的,所以格式很无语的混乱,能不能把这些信息统一成:邮箱空格昵称 的形式?
下面是一些例子,作为测试数据使用。我们大致统计了下有空格、制表符、逗号、分号、竖线、空格竖线空格、百分号、多个相同符号、以及其他组合。
有的一行中还有其他信息。
有的邮箱前后有尖括号。
有的整行都是其他信息。

123456@qq.com cccccccc
123457@qq.com        cccccccc2
1123456@qq.com,cccggggcc
156723457@qq.com;ccccxcvcccc1
1567xzxvdv@163.com | reydhdfhdh
1567xzfgxvdv@163.com|reydfdhdfhdh
1567xzfgxvdv@163.com        %        reydfdhdfhdh
dfhgdxvdv@163.com%%%%reydfdhdfghfhdh
<dfdhgrg456dxvdv@163.com> reyd785hdh
;<dfdhgrg456dxvdv@163.com> | reyd785hdh
其他信息 | reyd785hdh | dfdhgrg456dxvdv@163.com | 其他信息

或许可以这样:
  1. sed -r "s/[^a-z0-9_@\.\s-]+/ /ig;s/^ | $//g;s/(.+) (.+@.+)/\2 \1/" a.txt>b.txt
复制代码
1

评分人数

    • bl5062: 天神下凡!!技术 + 1

TOP

这格式蛋疼得...都直不起腰了

TOP

或许可以这样:
apang 发表于 2014-9-28 20:49



    测试了下不行,说没有sed命令,改为set后又说环境变量 -r "s/[^a-z0-9_@\.\s-]+/ /ig;s/^ | $//g;s/(.+) (.+@.+)/\2 \1/" a.txt 没有定义

TOP

回复 2# apang

TOP

回复 4# bl5062


    请在论坛里搜索sed ,下一个。

TOP

回复 4# bl5062


http://bbs.bathome.net/thread-3981-1-1.html
从这里下载一个sed.exe
放到 C:\Windows\System32 目录下面

TOP

回复 4# bl5062


    sed 是第三方工具,,和set是不同的概念,,按照7楼的地址和方法操作一下~~祝你成功~
问题解决后,请在标题前面注明[已解决],并给回答者加分——化繁为简,提高工作效率!

TOP

简直天神下凡,居然一句就搞定,佩服!!!!!!!!!!!
话说这就是传说中的正则表达式?能解释下这句话吗?

TOP

回复 9# bl5062


嗯,那就是正则表达式,建议你自己找本书看看,比如《精通正则表达式》

TOP

本帖最后由 apang 于 2014-9-29 15:58 编辑

回复 9# bl5062


    我是吃五谷杂粮、食人间烟火的人类,不是神仙哦。大致思路:
1:
s/[^a-z0-9_@\.\s-]+/ /ig
把一个或多个连续的非英文字母、数字、下划线、@、点、减号替换成一个空格
(这里的\s是多余的,请删掉)
比如这样一行:
;<[email]dfdhgrg456dxvdv@163.com[/email]> | reyd785hdh
会把“;<”替换成一个空格,把“> | ”替换成一个空格

2:
s/^ | $//g
经过第一步处理后,字串开头和结尾可能会含有一个空格字符
这一步就是删掉开头或结尾的空格

3:
s/(.+) (.+@.+)/\2 \1/
如果昵称在前、邮箱在后,则交换它们的位置

注意:代码并不检测邮箱名是否有效(假设a.txt中录入的都是有效邮箱、昵称)
1

评分人数

    • CrLf: s/[^a-z0-9_@\.\s-]+/ /ig技术 + 1

TOP

这奇葩格式啊。。。怎么这么坑。。

TOP

返回列表