[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 需要提取文本连续数字

00001
00002
00003
00004
00008
00010
00013
00014
00015
00016
00021
00022
00023
00026
00030
00031
00035
00036
00049
00060
00061
00062
00065


提取出连续的4位数字
提取后的文本样子如下

00001
00002
00003
00004


00013
00014
00015
00016


00021
00022
00023
00024

第三方库
  1. import more_itertools as mit
  2. iterable = list(map(lambda x: int(str(x).strip('0\n')), open('num', 'r')))
  3. result = map(lambda x: [str(i).zfill(5) for i in x], list(filter(lambda x:len(x) > 1, [list(group) for group in mit.consecutive_groups(iterable)])))
  4. print(list(result))
复制代码
1

评分人数

#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

  1. #! /usr/bin/env python3
  2. # ! coding:utf-8
  3. #auto detect step is negative or positive
  4. arr = list(map(lambda x: str(x).replace('\n', ''), open('series.txt', 'r')))
  5. result = list()
  6. _next = None
  7. nega_or_posi = (int(arr[1]) - int(arr[0])) /abs(int(arr[1]) - int(arr[0]))
  8. for i in range(len(arr)):
  9.     if i != len(arr)-1 and int(arr[i].lstrip('0')) + nega_or_posi == int(arr[i+1].lstrip('0')):
  10.         result.append(arr[i])
  11.         _next = arr[i + 1]
  12.     elif isinstance(_next, str):
  13.         result.append(_next)
  14.         _next = None
  15. print(result)
复制代码
1

评分人数

#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 6# went

原来忽略了一种情况,现在修改了.可以任意修改数列长度,步长可为负值
微信:flashercs
QQ:49908356

TOP

回复 6# went


    我倒是觉得,只要能够正确处理顶楼的样本就好。

TOP

各位可以试下这种情况,3种代码输出都不一样
插入00005
具体要看楼主怎么保留
  1. 00001
  2. 00002
  3. 00003
  4. 00004
  5. 00005
  6. 00008
  7. 00010
  8. 00013
  9. 00014
  10. 00015
  11. 00016
  12. 00021
  13. 00022
  14. 00023
  15. 00026
  16. 00030
  17. 00031
  18. 00035
  19. 00036
  20. 00049
  21. 00060
  22. 00061
  23. 00062
  24. 00065
复制代码

TOP

本帖最后由 flashercs 于 2020-6-17 06:33 编辑
  1. @echo off
  2. REM 查找step=1的等差数列arithmetric progression,长度为arraylen
  3. setlocal enabledelayedexpansion
  4. set in=series.txt
  5. set out=ArithmetricProgression.txt
  6. set arraylen=4
  7. set step=1
  8. if %arraylen% lss 1 (
  9.   echo 序列长度必须是大于0的整数
  10.   goto end
  11. )
  12. REM init: clear array
  13. for /f "delims==" %%A in ('2^>nul set arr[') do set %%A=
  14. set /a i=begin=0,end=begin+arraylen-1
  15. (
  16.   for /f "delims=" %%A in (%in%) do (
  17.     if !i! gtr %begin% (
  18.       set /a p=i-1
  19.       for %%P in (!p!) do set /a sub=1%%A-1!arr[%%P]!
  20.       if !sub! neq %step% (
  21.         set /a i=begin
  22.       )
  23.     )
  24.     set arr[!i!]=%%A
  25.     if !i! equ %end% (
  26.       for /l %%B in (%begin%,1,%end%) do echo !arr[%%B]!
  27.       echo.
  28.       set /a i=begin
  29.     ) else (
  30.       set /a i+=1
  31.     )
  32.   )
  33. )
  34. :end
  35. endlocal
  36. pause
  37. exit /b
复制代码
1

评分人数

微信:flashercs
QQ:49908356

TOP

本帖最后由 WHY 于 2020-6-17 01:03 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in (a.txt) do (
  4.     set "s1=!s2!"
  5.     set "s2=!s3!"
  6.     set "s3=!s4!"
  7.     set "s4=%%i"
  8.     if defined s1 (
  9.         set /a n1=1!s1! + 3, n2=1!s2! + 2, n3=1!s3! + 1, n4=1!s4!
  10.         if "!n1!" == "!n2!" if "!n2!" == "!n3!" if "!n3!" == "!n4!" (
  11.             echo;!s1!
  12.             echo;!s2!
  13.             echo;!s3!
  14.             echo;!s4!
  15.             Rem endlocal & setlocal enabledelayedexpansion
  16.         )
  17.     )   
  18. )
  19. pause
复制代码
1

评分人数

TOP

十分感谢大神

TOP

数据保存为1.txt
for读取每一行,然后再一路判断下去
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd.>"out.txt"
  4. (
  5. for /f %%i in (1.txt) do (
  6. if "!v1!"=="" (
  7. set "v1=%%i"
  8. ) else (
  9. if "!v2!"=="" (
  10. set /a "1/(1!v1!+1-1%%i)" >nul 2>nul && ( set "v1=%%i" ) || set "v2=%%i"
  11. ) else (
  12. if "!v3!"=="" (
  13. set /a "1/(1!v2!+1-1%%i)" >nul 2>nul && ( set "v1=%%i" & set "v2=" ) || set "v3=%%i"
  14. ) else (
  15. if "!v4!"=="" (
  16. set /a "1/(1!v3!+1-1%%i)" >nul 2>nul && ( set "v1=%%i" & set "v2=" & set "v3=" ) || set "v4=%%i"
  17. )
  18. )
  19. )
  20. )
  21. if not "!v4!"=="" (
  22. echo !v1!
  23. echo !v2!
  24. echo !v3!
  25. echo !v4!
  26. echo.
  27. set "v1=" & set "v2=" & set "v3=" & set "v4="
  28. )
  29. )
  30. )>"out.txt"
  31. type "out.txt"
  32. pause&exit
复制代码
1

评分人数

TOP

返回列表