我有一个文本文件,它就像这样格式化了;
(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是我用于打印的功能
答案 0 :(得分:1)
我发现为什么我的代码不起作用。我使用的变量名称类似于XXX[1]
。所以当findstr开始正则表达式搜索时,假设[1]
必须在文本文件中。傻我,我浪费时间看到这个错误:(
答案 1 :(得分:0)
如果你可以使用支持外观的正则表达式引擎,你可以使用这个正则表达式:
(?<={)[^}]+(?=})
例如,在Perl模式下使用grep
,您可以执行以下操作:
grep -P "(?<={)[^}]+(?=})" myfile
在评论中,您说您使用的是Windows,因此您可以使用pcregrep
(这是PCRE
发布内容的一部分)。
<强>解释强>
(?<={)
lookbehind声称前面的内容是{
[^}]+
匹配一个或多个不是}
(?=})
前瞻断言后面的内容是}
<强>参考强>