如何在Windows批处理脚本中使用REGEX从字符串中删除字母和特殊字符?

时间:2014-03-17 21:11:02

标签: regex batch-file

我需要删除字母a到z,A到Z和特殊字符。我只需要数字和小数点。我发现很多使用字符串操作的例子,但我认为使用正则表达式更好。

例如,

numbers = 10.20af24

数字必须等于10.20而不是10.20af24

谢谢。

4 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL enabledelayedexpansion
SET "num=10.20af24"
FOR /l %%d IN (1,1,999) DO SET result=!num:~0,%%d!&ECHO(!num:~%%d,1%!|FINDSTR /r "[0-9\.]" >nul&IF ERRORLEVEL 1 GOTO done
:done
ECHO %result%

GOTO :EOF

...因为你坚持使用正则表达式

答案 1 :(得分:0)

这个名为repl.bat的帮助程序批处理文件具有类似于SED repl /?的正则表达式功能以获取帮助 - 从以下网址下载:https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

这个名为findrepl.bat的帮助程序批处理文件类似于GREP - 从以下网址下载:https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

这适用于您的样本,但在这种情况下它很简单:

@echo off
echo 10.20af24|repl "[a-zA-Z].*" ""
pause

repl.bat放在与批处理文件相同的文件夹中或路径上。

答案 2 :(得分:0)

再一次

@echo off

    setlocal enableextensions enabledelayedexpansion
    set "string=10.20af24"
    set "num="
    for /f %%a in ('cmd /q /u /c "echo(%string%"^|more^|findstr /r /c:"[0-9.]"') do set "num=!num!%%a"

    echo %num%

答案 3 :(得分:-1)

最好使用正则表达式,尽管Batch没有任何内置功能。您可以执行以下操作 -

for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set number=!number:%%a=!

示例 -

@echo off
setLocal enableDelayedExpansion
set number=10.20af24
for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set number=!number:%%a=!
echo !number!

您可以在for循环中添加其他特殊字符,但请记住,您可能需要使用克拉^来转义它们。