找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29090|回复: 9

[文本处理] 如何从txt文本中提取指定格式/特征的字符串

[复制链接]
发表于 2018-2-13 14:30:26 | 显示全部楼层 |阅读模式
  1. for /f "delims=- tokens=1-10" %%u in ('findstr "[a-z]-[a-z]" key.txt') do (
  2. set a=%%u&set b=%%v&set c=%%w&set d=%%x&set e=%%y
  3. set a=!a:~-5!&set b=!b:~0,5!&set c=!c:~0,5!&set d=!d:~0,5!&set e=!e:~0,5!
  4. echo !a!-!b!-!c!-!d!-!e! >>KeyFind.txt
  5. echo ==   !a!-!b!-!c!-!d!-!e!
  6. set var=!a!-!b!-!c!-!d!-!e!
复制代码
需要把文本中的key提取出来,如:
NHTJK-DFFPK-4DRM8-MB9RK-T83VMWK4WH-2DNVR-KF8V3-YHFF8-F3K7K
4NH49-69JP4-T3MC6-KH6KM-G3CJQ
【客服激活】 FNT4V-94B6T-T2CXK-K3H2Q-M7WWQ
【客服激活】W8YNW-67JP9-V464G-RB32Y-F9DF3
【客服激活】VJTNQ-GDQFK-WBMK9-P7CGW-7FT43
输出为:NHTJK-DFFPK-4DRM8-MB9RK-T83VM
           WK4WH-2DNVR-KF8V3-YHFF8-F3K7K
           4NH49-69JP4-T3MC6-KH6KM-G3CJQ
           FNT4V-94B6T-T2CXK-K3H2Q-M7WWQ
           W8YNW-67JP9-V464G-RB32Y-F9DF3
           VJTNQ-GDQFK-WBMK9-P7CGW-7FT43
问题:自己写的代码中第一行无法处理,还请高手指教
发表于 2018-2-14 23:22:32 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2 delims=】" %%i in (key.txt) do (
  3. set vv=%%i
  4. set vv=!vv: =!
  5. echo !vv:~0,29!>>321.txt
  6. echo !vv:~29,29!>>321.txt
  7. set ww=%%j
  8. set ww=!ww: =!
  9. echo !ww:~0,29!>>321.txt
  10. echo !ww:~29,29!>>321.txt
  11. )
  12. findstr /i "[a-z]-[a-z]" 321.txt>>KeyFind.txt
  13. del /q 321.txt
复制代码
 楼主| 发表于 2018-2-15 09:59:51 | 显示全部楼层
回复 2# hlzj88
大佬您好,提取文本中key的前面有可能不是】,还可能有其他符号,这个可以解决吗
发表于 2018-2-15 11:10:02 | 显示全部楼层
本帖最后由 ivor 于 2018-2-15 11:22 编辑
  1. grep -Po ".{5}(-.{5}){4}" key.txt
复制代码
grep下载地址:http://www.bathome.net/s/tool/in ... ode=4&vermode=2
发表于 2018-2-15 22:10:46 | 显示全部楼层
本帖最后由 codegay 于 2018-2-16 19:10 编辑
  1. import
  2.     re,
  3.     os,
  4.     strutils

  5. var keyfile = getAppDir() & "/key.txt"
  6. var txt = readfile(keyfile)

  7. echo "文本:\r\n",txt

  8. var result = join(findAll(txt, re"\w{5}(-\w{5}){4}"),"\r\n")

  9. echo "匹配结果:\r\n",result

  10. var newfile = getAppDir() & "/new-key.txt"
  11. writefile(newfile, result)

复制代码
  1. 匹配结果:
  2. NHTJK-DFFPK-4DRM8-MB9RK-T83VM
  3. WK4WH-2DNVR-KF8V3-YHFF8-F3K7K
  4. 4NH49-69JP4-T3MC6-KH6KM-G3CJQ
  5. FNT4V-94B6T-T2CXK-K3H2Q-M7WWQ
  6. W8YNW-67JP9-V464G-RB32Y-F9DF3
  7. VJTNQ-GDQFK-WBMK9-P7CGW-7FT43
复制代码
nim语言

nim语言的官方网站https://nim-lang.org/
发表于 2018-2-15 22:18:39 | 显示全部楼层
用支持正则功能的编辑器打开,查找 \w{5}(-\w{5}){4}
就可以了。

比如 Notepad++
notepad2-mod
 楼主| 发表于 2018-2-16 13:58:22 | 显示全部楼层
回复 6# codegay
谢谢您的回复,直接在批处理运行是不是不可以啊
发表于 2018-2-16 16:34:58 | 显示全部楼层
回复 7# 留白


    不可以。nim语言的。需要自己编译。只是贴出来好看的。
发表于 2018-2-18 04:08:24 | 显示全部楼层
本帖最后由 codegay 于 2018-2-18 06:24 编辑

使用支持正则查找替换功能的编辑器:
查找中填入:
  1. (.*?)(\w{5}(?:-\w{5}){4}).*?\r?\n?
复制代码
替换中填入:
  1. \2\r\n
复制代码
notepad++ 是支持文件的批量查找替换的。

然后点全部替换就可以了。

评分

参与人数 1技术 +1 收起 理由
ivor + 1 (.*?)(\w{5}(-\w{5}){4})(\r\n)?

查看全部评分

发表于 2018-2-18 10:52:07 | 显示全部楼层

解释一下为什么这么写,
序列号激活码这些东西,通常是字母+数字组成,所以用\w可以避免匹配到其它字符的情况。

\r\n是windows默认的换行模式,linux下是\n,像python好像是默认使用通用换行模式,读入文本后的换行都是\n,\r?\n? 可以保证不同的换行风格都可以匹配到。

后面还要还要加.*?的原因是,考虑中间可以还插入了其它字符的可能情况:
  1. 【242342】 FNT4V-94B6T-T2CXK-K3H2Q-M7WWQ【242342】W8YNW-67JP9-V464G-RB32Y-F9DF3
复制代码
如果没有当然不用写。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 07:45 , Processed in 0.022122 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表