PSi*_*ing 3 batch-file regex-group
我需要使用批处理文件从字符串中提取子字符串(带下划线的数字)。例如 :
我有 AbC_d1344_454_78a。或 Deg_e23_74_67。
我想提取子串 1344_454_78 和 23_74_67。
您有几个带有批处理文件的解决方案。
如果您的数据在数字之前总是相同数量的字符,您可以执行一个简单的子字符串来提取部分字符串。所以这会从字符串中删除前五个字符。
SET "VAR=AbC_d1344_454_78a"
SET "VAR=%VAR:~5%"
Run Code Online (Sandbox Code Playgroud)
但此时您仍然在末尾有字母字符。因此,您可以执行一个简单的 findstr 命令来查看末尾是否有字母字符,如果有,您可以使用另一个子字符串再次删除它以删除最后一个字符。
SET "var=AbC_d1344_454_78a"
SET "var=%var:~5%"
echo %var%|findstr /R /I /C:"[a-z]$">nul &&SET "var=%var:~0,-1%"
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用 FOR /F 命令并利用 DELIMS 选项通过使用下划线作为分隔符将字符串分解为单独的变量。您可以在分配给这样的变量的第一个下划线之后获得所有内容。
FOR /F "TOKENS=1* DELIMS=_" %%G IN ("AbC_d1344_454_78a") DO SET "var=%%H"
Run Code Online (Sandbox Code Playgroud)
但同样,您现在有一个前导和尾随字母字符。同样,您可以使用 FINDSTR 命令来测试并删除前导和/或尾随字母字符。
FOR /F "TOKENS=1* DELIMS=_" %%G IN ("AbC_d1344_454_78a") DO SET "var=%%H"
echo %var%|findstr /R /I /C:"^[a-z]">nul &&SET "var=%var:~1%"
echo %var%|findstr /R /I /C:"[a-z]$">nul &&SET "var=%var:~0,-1%"
Run Code Online (Sandbox Code Playgroud)
如果您有多个前导和尾随字母字符,您可以使用标签和 goto 来继续迭代 FINDSTR 命令。
FOR /F "TOKENS=1* DELIMS=_" %%G IN ("AbC_d1344_454_78a") DO SET "var=%%H"
:leading
echo %var%|findstr /R /I /C:"^[a-z]">nul &&(SET "var=%var:~1%" &GOTO leading)
:trailing
echo %var%|findstr /R /I /C:"[a-z]$">nul &&(SET "var=%var:~0,-1%" &GOTO trailing)
Run Code Online (Sandbox Code Playgroud)
根据需要交换任何代码示例。