标题: [文本处理] 如何从txt文本中提取指定格式/特征的字符串 [打印本页]
作者: 留白 时间: 2018-2-13 14:30 标题: 如何从txt文本中提取指定格式/特征的字符串
- for /f "delims=- tokens=1-10" %%u in ('findstr "[a-z]-[a-z]" key.txt') do (
- set a=%%u&set b=%%v&set c=%%w&set d=%%x&set e=%%y
- set a=!a:~-5!&set b=!b:~0,5!&set c=!c:~0,5!&set d=!d:~0,5!&set e=!e:~0,5!
- echo !a!-!b!-!c!-!d!-!e! >>KeyFind.txt
- echo == !a!-!b!-!c!-!d!-!e!
- 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
问题:自己写的代码中第一行无法处理,还请高手指教
作者: hlzj88 时间: 2018-2-14 23:22
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims=】" %%i in (key.txt) do (
- set vv=%%i
- set vv=!vv: =!
- echo !vv:~0,29!>>321.txt
- echo !vv:~29,29!>>321.txt
- set ww=%%j
- set ww=!ww: =!
- echo !ww:~0,29!>>321.txt
- echo !ww:~29,29!>>321.txt
- )
- findstr /i "[a-z]-[a-z]" 321.txt>>KeyFind.txt
- del /q 321.txt
复制代码
作者: 留白 时间: 2018-2-15 09:59
回复 2# hlzj88
大佬您好,提取文本中key的前面有可能不是】,还可能有其他符号,这个可以解决吗
作者: ivor 时间: 2018-2-15 11:10
本帖最后由 ivor 于 2018-2-15 11:22 编辑
- grep -Po ".{5}(-.{5}){4}" key.txt
复制代码
grep下载地址:http://www.bathome.net/s/tool/in ... ode=4&vermode=2
作者: codegay 时间: 2018-2-15 22:10
本帖最后由 codegay 于 2018-2-16 19:10 编辑
- import
- re,
- os,
- strutils
-
- var keyfile = getAppDir() & "/key.txt"
- var txt = readfile(keyfile)
-
- echo "文本:\r\n",txt
-
- var result = join(findAll(txt, re"\w{5}(-\w{5}){4}"),"\r\n")
-
- echo "匹配结果:\r\n",result
-
- var newfile = getAppDir() & "/new-key.txt"
- writefile(newfile, result)
复制代码
- 匹配结果:
- 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
复制代码
nim语言
nim语言的官方网站https://nim-lang.org/
作者: codegay 时间: 2018-2-15 22:18
用支持正则功能的编辑器打开,查找 \w{5}(-\w{5}){4}
就可以了。
比如 Notepad++
notepad2-mod
作者: 留白 时间: 2018-2-16 13:58
回复 6# codegay
谢谢您的回复,直接在批处理运行是不是不可以啊
作者: codegay 时间: 2018-2-16 16:34
回复 7# 留白
不可以。nim语言的。需要自己编译。只是贴出来好看的。
作者: codegay 时间: 2018-2-18 04:08
本帖最后由 codegay 于 2018-2-18 06:24 编辑
使用支持正则查找替换功能的编辑器:
查找中填入:- (.*?)(\w{5}(?:-\w{5}){4}).*?\r?\n?
复制代码
替换中填入:复制代码
notepad++ 是支持文件的批量查找替换的。
然后点全部替换就可以了。
作者: codegay 时间: 2018-2-18 10:52
解释一下为什么这么写,
序列号激活码这些东西,通常是字母+数字组成,所以用\w可以避免匹配到其它字符的情况。
\r\n是windows默认的换行模式,linux下是\n,像python好像是默认使用通用换行模式,读入文本后的换行都是\n,\r?\n? 可以保证不同的换行风格都可以匹配到。
后面还要还要加.*?的原因是,考虑中间可以还插入了其它字符的可能情况:- 【242342】 FNT4V-94B6T-T2CXK-K3H2Q-M7WWQ【242342】W8YNW-67JP9-V464G-RB32Y-F9DF3
复制代码
如果没有当然不用写。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |