【问题标题】:How to remove alphabets and special characters from a string using REGEX in Windows Batch Script?如何在 Windows 批处理脚本中使用 REGEX 从字符串中删除字母和特殊字符?
【发布时间】:2014-03-17 21:11:01
【问题描述】:

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

例如,

数字 = 10.20af24

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

谢谢。

【问题讨论】:

  • 您在此处描述的内容可能不需要它,但您可以从 PowerShell 中获得比命令行更多的正则表达式功能:regular-expressions.info/powershell.html
  • 看起来像十六进制。您是否尝试过(?:[a-fA-F0-9][a-fA-F0-9])+,它也可以匹配 20,除非您遵守严格的格式,否则很难。

标签: regex batch-file


【解决方案1】:
@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

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

【讨论】:

    【解决方案2】:

    这个名为 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 放在与批处理文件相同的文件夹中或路径上。

    【讨论】:

      【解决方案3】:

      还有一个

      @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%
      

      【讨论】:

        【解决方案4】:

        使用正则表达式会更好,尽管 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 循环中,但请记住,您可能需要使用克拉 ^ 转义它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-04
          • 2021-06-01
          • 1970-01-01
          • 2022-01-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多