regex 批处理文件中的正则表达式:我想在匹配后提取号码

hjqgdpho  于 2023-03-04  发布在  其他
关注(0)|答案(1)|浏览(71)

我有一个要求,在日志文件中,我必须搜索字符串“ABCD.exe得分=755”,然后找到什么是“得分="后的数字,数字将发生变化。这我必须通过一个批处理文件。
正在搜索的文件的内容

ScanFolder\ABCD.exe score=755 analyzer=Cloud prevScore=0 IsInArchive=False

从下面的代码中,我得到的输出是“755 analyzer”,而结果应该只是“755”

@echo off
setlocal
find "ABCD.exe score=" 2023-02-22.log > ABCD.txt
for /F "tokens=2 delims==" %%a in ('findstr /I "score=" ABCD.txt') do set "scanScore=%%a"  
echo Score is: %scanScore%   
endlocal
rxztt3cl

rxztt3cl1#

@ECHO OFF
SETLOCAL

for /F "tokens=3 delims== " %%a in ('findstr /I "score=" q75543943.txt') do set "scanScore=%%a"  
echo Score is: +%scanScore%+

:: another method

SET /p "line="<q75543943.txt
SET "line=%line:*score=%"
SET "scanscore="

:checkloop
IF "%line:~1,1%" geq "0" IF "%line:~1,1%" leq "9" SET "scanscore=%scanscore%%line:~1,1%"&SET "line=%line:~1%"&GOTO checkloop
echo Score is: +%scanScore%+

GOTO :EOF

空白字符可能不是空格,因为这些选项中的第一个选项被报告为失败。这些字符可能是制表符,或者输出字符串可能是Unicode。OP应使用十六进制编辑器检查5后面字符的实际ASCII值。
第二种方法应该是先删除读入line的字符串中位于字符串score之前的部分,留下=755?analyzer...
因此,使用一个循环并检查该字符串中的 second 字符(因为它最初的开头是一个=),如果它是数字,则将其串入结果变量,然后删除line的第一个字符并重复,直到找到非空格和非数字的神秘字符。
我使用了一个不同的文件名,因为我用他们的个人数据来维护我的响应。
此外,我还将echo ed响应括在由+字符组成的括号中,以显示结果中没有杂散空格。

相关问题