Board logo

标题: [文本处理] 批处理正则表达式怎样替换第二个指定字符? [打印本页]

作者: qunwang6    时间: 2011-2-11 20:06     标题: 批处理正则表达式怎样替换第二个指定字符?

1章  何谓线性代数 第9
              1.线性代数 第14
              2.研究要点和考试要点 第21
              3.数学家眼中的线性代数 第22
               3.1数学家眼中的线性代数 第2
               3.2线性代数和公理 第24
             第2章  基础知识 第25

用一正则表达式可以将上面的文本中第二个的“第”替换成空格或者删掉。

1章  何谓线性代数 9
              1.线性代数 14
              2.研究要点和考试要点 21
              3.数学家眼中的线性代数 22
               3.1数学家眼中的线性代数 2
               3.2线性代数和公理 24
             第2章  基础知识 25

[ 本帖最后由 qunwang6 于 2011-2-11 20:07 编辑 ]
作者: lxh623    时间: 2011-2-11 20:36

正则表达式懂一点点,但是,我想可以用PdgCntEditor先左对齐,删除“空格+第”,或者删除“页”,再自动切分,再替换“第+制表符”为制表符。最后自动分级。

[ 本帖最后由 lxh623 于 2011-2-11 20:38 编辑 ]
作者: CrLf    时间: 2011-2-11 21:03

笨办法:
  1. @echo off
  2. for /f "delims=" %%z in (a.txt) do (
  3.     for /f "tokens=1,2* delims=第" %%a in ("@%%z") do (
  4.         for /f "tokens=* delims=@" %%d in ("%%a第%%b%%c") do (
  5.             echo %%d
  6.         )
  7.     )
  8. )
复制代码

看错题意,不过代码本身也错了一点

[ 本帖最后由 zm900612 于 2011-2-12 01:55 编辑 ]
作者: asnahu    时间: 2011-2-11 22:10

  1. sed "s/第\([0-9]\+页\)/\1/" urfile
复制代码

作者: CrLf    时间: 2011-2-11 22:12

有sed当然最好啦~
作者: wc726842270    时间: 2011-2-11 22:21

  1. @echo off
  2. for /f "tokens=1-3 delims=第" %%i in (1.txt) do (echo %%i%%j%%k|findstr "[1-9]*章"&&echo 第%%i%%j%%k>>2.txt||echo %%i%%j%%k >>2.txt)
  3. pause
复制代码
最好将“第N章”放在行的最前面
作者: wc726842270    时间: 2011-2-11 22:23

只可惜SED的是外部的,一关机什么都没了。不过FINDSTR也有部分正则
作者: Batcher    时间: 2011-2-11 22:26     标题: 回复 7楼 的帖子

为啥外部的一关机什么都没了?
作者: wc726842270    时间: 2011-2-11 22:28     标题: 回复 8楼 的帖子

因为我都是在网吧弄啊
作者: CrLf    时间: 2011-2-11 22:29

findstr启动速度很慢(但是启动之后非常快),运行次数越多效率越低

猜测一下,7楼是在网吧有还原卡?
作者: wc726842270    时间: 2011-2-11 22:35     标题: 回复 10楼 的帖子

呵呵,原因么,我想是因为无盘吧。至于细节也非一两句能说清的。有兴趣可以问问网吧的管理
作者: Batcher    时间: 2011-2-11 23:01     标题: 回复 11楼 的帖子

几个单词就能说清:无盘/还原卡/软件还原
作者: CrLf    时间: 2011-2-11 23:02

杯具,客场作战
作者: wc726842270    时间: 2011-2-11 23:10     标题: 回复 12楼 的帖子

哦。在一年前我以为是有还原精灵呢。之后还原卡,后来就是无盘。给我弄得,我都很乱
作者: qunwang6    时间: 2011-2-12 01:26

感谢楼上各位的解答
作者: lvsehuaxue    时间: 2011-2-12 10:35     标题: 不用正则和sed也可以

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set "v=%%i"
  4.     set "v=!v:第=!"
  5.     for /f "tokens=* delims= " %%i in ("!v!") do (
  6.         set "s=%%i"
  7.         set "s2=!s:~1,1!"
  8.         call set "x=%%v:!s!=%%"
  9.         if !s2! equ 章 (echo !x!第%%i) else echo !x!%%i
  10.     )
  11. )
  12. pause
复制代码

作者: lvsehuaxue    时间: 2011-2-12 10:38     标题: 不用正则也可

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.     set "v=%%i"
  4.     set "v=!v:第=!"
  5.     for /f "tokens=* delims= " %%i in ("!v!") do (
  6.         set "s=%%i"
  7.         set "s2=!s:~1,1!"
  8.         call set "x=%%v:!s!=%%"
  9.         if !s2! equ 章 (echo !x!第%%i) else echo !x!%%i
  10.     )
  11. )
  12. pause
复制代码

作者: lvsehuaxue    时间: 2011-2-12 10:41

抱歉刚才以为没发上,后来发现发重了




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2