Board logo

标题: [文本处理] 如何提取出一个文本中的QQ号码 [打印本页]

作者: 流氓王朝    时间: 2016-3-31 19:57     标题: 如何提取出一个文本中的QQ号码

本帖最后由 pcl_test 于 2016-4-2 15:34 编辑

我在论坛找到一个教程  代码如@echo off
(for /f "tokens=5 delims==&]" %%i in ('findstr /i "&Uin=[1-9][0-9]*[&\]]" "*.txt"') do echo %%i)>qq.txt
pause

把此代码保存为1.bat 与下面的文本保存为2.txt放在同一个文件夹下 运行1.bat 可输出qq.txt  但是为空  

TXT文本如下
天天爱吃鱼
&Uin=78695

52love
&Uin=90486

kitain
&Uin=93215

苍小虎
&Uin=232209

lightair
&Uin=233167

zxwax
&Uin=277150

草 哲
&Uin=337479

风子
&Uin=353679

-浅浅风
&Uin=427157

joye
&Uin=439847
作者: CrLf    时间: 2016-3-31 20:06

长文本应只发关键部分,或放网盘
作者: pcl_test    时间: 2016-3-31 20:19

本帖最后由 pcl_test 于 2016-3-31 23:10 编辑

第三方
  1. sed -n "s/&Uin=\([1-9][0-9]*\)/\1/p" "1.txt">"2.txt"
复制代码

作者: 流氓王朝    时间: 2016-3-31 20:33

听不懂啊 能讲明白一点吗 就是把这个代码保存成1.bat 然后运行吗
作者: ivor    时间: 2016-3-31 21:35

本帖最后由 ivor 于 2016-4-1 22:43 编辑

回复 1# 流氓王朝
  1. @echo off
  2. (for /f "tokens=1,2 delims==" %%i in ('findstr /i "&Uin=[1-9][0-9]*" "*.txt"') do echo %%j)>qq.txt
  3. pause
复制代码

作者: codegay    时间: 2016-4-1 01:11

  1. """
  2. python
  3. 2016年4月1日 01:05:09 codegay
  4. """
  5. import re
  6. txt=open("qq.txt").read()
  7. result=re.findall(r"""&Uin=(\d+)""",txt)
  8. print(result)
复制代码

作者: codegay    时间: 2016-4-1 01:24

本帖最后由 codegay 于 2016-4-1 01:26 编辑
  1. #=
  2. julia正则提取文本中的QQ号.jl
  3. 2016年3月31日 21:51:50 codegay
  4. 练习一下Julia的正则表达式
  5. =#
  6. txt=open(readlines,"a.txt")
  7. filter!(r"&Uin=(\d+)",txt)
  8. f=open("result.txt","w+")
  9. for r in txt
  10.     write(f,match(r"&Uin=(\d+)",r).captures[1]*"\r\n")
  11. end
  12. close(f)
复制代码

作者: CrLf    时间: 2016-4-1 02:02

本帖最后由 CrLf 于 2016-4-1 02:04 编辑

hta:
  1. @mshta http://bathome.net/s/hta/?string "type('2.txt').replace(/^(?!&Uin=\d+)/gm,'').match(/\d+$/mg)" >qq.txt
复制代码

作者: sishentibu    时间: 2016-4-1 22:39

回复 5# ivor


    &Uin=[1-9][1-9]*
这段应该改为如下吧?
&Uin=[1-9][0-9]*
作者: ivor    时间: 2016-4-1 22:43

回复 9# sishentibu


    这都被你发现了
作者: sishentibu    时间: 2016-4-2 11:47

回复 10# ivor

因为代码短,所以就看了下
作者: happy886rr    时间: 2016-4-2 13:51

  1. fr 1.txt -stdout -ric:"&Uin=" /t:""
复制代码
回复 1# 流氓王朝
作者: codegay    时间: 2016-4-2 13:58

回复 12# happy886rr


    fr 默认会把不配的行也输出...超烦.
作者: happy886rr    时间: 2016-4-2 14:00

回复 13# codegay
是的,所以在加个管道findstr 纯数字
作者: codegay    时间: 2016-4-2 14:12

本帖最后由 codegay 于 2016-4-2 15:50 编辑

f的-o:"k"参数加fr替换
  1. f -o:"k" -ric:"&Uin=(\d+)" 1.txt -stdout|fr -stdout -ric:"&Uin=" /t:""&pause
复制代码
可以省掉-stdout参数.
  1. f -o:"k" -ric:"&Uin=(\d+)" 1.txt |fr -ric:"&Uin=" /t:""&pause
复制代码

作者: codegay    时间: 2016-4-2 14:18

默认五数字以上才都是QQ,用一个F就可以:
  1. f -o:"k" -ric:"\d{5,}" 1.txt&pause
复制代码
匹配到uin的话,需要两层.
  1. f -o:"k" -ric:"&Uin=(\d+)" 1.txt|f -o:"k" -ric:"\d{5,}"&pause
复制代码

作者: codegay    时间: 2016-4-2 14:21

  1. sed -n "s/&Uin=\(\d*\)/\1/p" "1.txt"&pause
复制代码

作者: happy886rr    时间: 2016-4-2 14:54

本帖最后由 happy886rr 于 2016-4-2 15:01 编辑

回复 17# codegay
行啊。细节都注意了。今天才知道findstr /be "[0-9]*"并不是匹配纯数字。




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