0

我尝试解析文件并需要检测标签中每一列的数字。我需要检测:

  1. 如果有号码
  2. 如果数字是 1-3 位数字。
  3. 如果在开头、结尾或分隔点处有一个点(我可以用字符串替换对点进行最后两次检测,但检测到我不知道的数字)。

我已经有了在标签中提取数据的 for 循环:

for %%Z in (hide_2.htm) do (
    for /F "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 delims=<>" %%A on ('grep -B 1411 -E "</table>" %%Z ^| grep -E ^"^(display^|^^\d\d{1,3}^|country^|^<td^>HTTP^|rightborder^).*$^" ') do (
        echo A:%%A + %%B + %%C + %%D + %%E + %%F + %%G + %%H + %%I + %%J + %%K + %%L
        pause
    )
)

输入为:A: + td + span + span + 41 + /span + span style="display: none;" + 111 + /span + div + +
A: style="display: none;" + 190 + /div + span class="" style="" + . + /span + span + 197 + /span + span + +
A: style="display: none;" + 24 + /跨度 + 跨度 + /跨度 + + span style="display: + + + +
A:inline;" + 132 + /span + span style="display: none;" + 39 + /跨度 + + 跨度 + + + +
A:style="display: inline;" + 186 + /span + /span + /td + + + + + + +
A: + td rel="rw" + span class="country" + img + + + + + + + +
A: + td + HTTPS + /td + + + + + + + +

源数据取自这里

编辑: 最好是保留两个变量。第一个变量保留数字,第二个变量保留点或标记(如果点存在)。

Edit2: 输入值可以是例如:120,132,186,24,111,41,., or .120,.132,.186,.24,.111,.41 ...这些值可以在任何列中。

Edit3: 数字总是在列的末尾。点可以在开始,但不能在数字变量的结果中。

4

2 回答 2

1
set "$=0" &if defined $ if !$! equ +!$! echo. isNumber: '!$!'
set "$=NaN" &if defined $ if !$! equ +!$! echo. isNumber: '!$!'

if "%VAR%" neq "" if %VAR% equ +%VAR% echo. %VAR% is a number.

Solution by Ed Dyreen, thanks!

于 2012-06-16T15:55:46.917 回答
0

可能最简单和最灵活的方法是使用findstr命令

@echo off
set "_VALUE=%~1" & rem // (take value from first command line argument)

cmd /V /C echo(!_VALUE!| > nul findstr /R /X ^
    /C:"00*" /C:"[-+]00*" ^
    /C:"[123456789][0123456789]*" ^
    /C:"[-+][123456789][0123456789]*" ^
    && echo The value "%_VALUE%" is numeric.

您可以指定多个搜索字符串,其中一个必须匹配才能将值视为数字。

额外的cmd实例旨在启用延迟扩展(由于),即使使用不平衡的引号和特殊字符(例如, /V),也需要能够处理每个任意字符串。如果不能发生这种情况,您可以用 替换该部分。echo^&cmd /V /C echo(!_VALUE!echo(%_VALUE%

于 2017-04-13T00:03:55.510 回答