我有一个文本文件,其格式如下:
(1992){0103644}[00004]
(1999){0137523}[00019]
(1991){0103064}[00098]
(2001){0246578}[00103]
(2011){1399103}[00150]
我正在尝试在此文本中查找变量(由用户输入)。{}
我必须在这之间搜索变量。
setlocal EnableDelayedExpansion
set "SIRA=1"
set "TEST=103"
for /f "tokens=1-3 delims=(){}[]" %%a in ('findstr /irc:"\{[0-9]*!TEST![0-9]*\}" %MURL%') do (
set FISIM[!SIRA!]=%%a
set FYIL[!SIRA!]=%%b
set FIDD[!SIRA!]=%%c
set /a SIRA+=1
)
set /a SIRA-=1
for /l %%i in (1,1,!SIRA!) do call :_Yazdir "%%i" "!FISIM[%%i]!" "!FYIL[%%i]!" "!FIDD[%%i]!" "!SATIRRENGI!"
goto :EOF
它只有在我将变量写在findstr中时才起作用(在这种情况下,它!TEST!
由代替103
)。那么有没有可能找到它的方法呢?
PS:%MURL%包含文本文件的名称。
PS:: _Yazdir是我用于打印的功能
如果您可以使用支持环视的正则表达式引擎,则可以使用此正则表达式:
(?<={)[^}]+(?=})
例如,grep
在Perl模式下,您可以执行以下操作:
grep -P "(?<={)[^}]+(?=})" myfile
在注释中,您说您使用的是Windows,因此可以使用pcregrep
(它是发行版的一部分PCRE
)。
解释
(?<={)
回顾后发断言,什么是先于一{
[^}]+
匹配一个或多个不是 }
(?=})
预测先行断言,接下来就是}
参考
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句