首页 > 解决方案 > 使用正则表达式的 findstr 函数

问题描述

我试图从字符串中单独提取数字,并且使用下面的正则表达式看起来没有帮助。

set d=22222112k
set CR =echo %d%|FindStr /R "^[0123-9]*$"
echo %CR%

如何从变量中单独提取数字?

标签: batch-file

解决方案


您可以使用带有批处理文件的 vbscript 中的正则表达式来提取数字,如下所示:Extract_Number.bat

@echo off & color 0A
Title Extract Number from String using Regex with vbscript
Set "InputSring=22222112k"
Call :Extract_Number "%InputSring%" Number
Echo The Number extracted is %Number%
Pause & Exit
::-----------------------------------------------------------------------------------
:Extract_Number <InputString> <Variable to be Set>
(
echo WScript.StdOut.WriteLine Extract_Number(Data^)
echo Function Extract_Number(Data^)
echo      Data = WScript.Arguments(0^)  
echo      Set re = New RegExp 
echo      re.Global = True 
echo      re.IgnoreCase = True  
echo      re.Pattern = "\d+" 
echo      For Each Match in re.Execute(Data^) 
echo          Number = Match.Value 
echo      Next  
echo     Extract_Number = Number
echo End Function
)>"%tmp%\%~n0.vbs"
for /f "delims=" %%A in ('cscript //nologo "%tmp%\%~n0.vbs" "%~1"') do set "%2=%%A"
If Exist "%tmp%\%~n0.vbs" Del "%tmp%\%~n0.vbs"
Exit /B
::----------------------------------------------------------------------------------

编辑:或者您也可以使用 Powershell 来完成,如下面的代码:

@echo off & color 0A
Title Extract Number from String using Regex with Powershell
Set "InputSring=22222112k"
Set psCmd="&{$re=[regex]'\d+'; $re.Match('%InputSring%').value}"
Call :RunPS %psCmd% Number
Echo The Number extracted is %Number%
pause & Exit
::--------------------------------------------------------------------
:RunPS <PassPSCMD> <RetValue>
  for /F "usebackq tokens=*" %%i in (`Powershell %1`) do set "%2=%%i"
Goto:eof
:: End of :RunPS function
::--------------------------------------------------------------------

推荐阅读