Board logo

标题: [文本处理] [已解决]批处理正则表达式怎样对匹配的数字加1? [打印本页]

作者: ge_xin_yu    时间: 2011-5-12 13:49     标题: [已解决]批处理正则表达式怎样对匹配的数字加1?

一份文件,其中需要将文件中引号中的数字加1,手动改是相当的麻烦,想到使用正则表达式统一修改,突然发现正则式仅是匹配,匹配后将原数字加1,似乎通过正则表达式无法实现,请坛中高手指点,有无好的解决方法...
作者: batman    时间: 2011-5-12 14:52

请楼主附上文本格式。。。
作者: ge_xin_yu    时间: 2011-5-12 19:56

请楼主附上文本格式。。。
batman 发表于 2011-5-12 14:52

格式类似如下,现在要解决的问题是将页码后面引号中到数字加1,用正则表达式似乎无法做到这一点,正则似乎只能匹配,而不能修改:
<书签 文本="罗祖" 动作="打开外部PDF文档" 页码="5" 显示方式="坐标缩放" 左="保持不变" 上="保持不变" 路径="b95-3.pdf" 新窗口="否" />
                                <书签 文本="刘姓" 动作="打开外部PDF文档" 页码="6" 显示方式="坐标缩放" 左="保持不变" 上="保持不变" 路径="b95-3.pdf" 新窗口="否" />
                                <书签 文本="邵九娘" 动作="打开外部PDF文档" 页码="8" 显示方式="坐标缩放" 左="保持不变" 上="保持不变" 路径="b95-3.pdf" 新窗口="否" />
                                <书签 文本="巩仙" 动作="打开外部PDF文档" 页码="14" 显示方式="坐标缩放" 左="保持不变" 上="保持不变" 路径="b95-3.pdf" 新窗口="否" />
                                <书签 文本="二商" 动作="打开外部PDF文档" 页码="18" 显示方式="坐标缩放" 左="保持不变" 上="保持不变" 路径="b95-3.pdf" 新窗口="否" />
                                <书签 文本="沂水秀才" 动作="打开外部PDF文档" 页码="20" 显示方式="坐标缩放" 左="保持不变" 上="保持不变" 路径="b95-3.pdf" 新窗口="否" />
作者: batman    时间: 2011-5-12 20:48

  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "tokens=1-4* delims==" %%a in (a.txt) do (
  3.     for /f "tokens=1*" %%1 in ("%%d") do (
  4.         set /a a=%%~1+1
  5.         echo %%a=%%b=%%c="!a!" %%2=%%e
  6.     )
  7. ))>b.txt
  8. start b.txt
复制代码

作者: ge_xin_yu    时间: 2011-5-12 23:14

4# batman
感谢版主回复,没有看懂,请版主解释一下这两个语句的意思:

set /a a=%%~1+1 这里面~是什么意思,%%~1,1这个数字也可以作为变量?
echo %%a=%%b=%%c="!a!" %%2=%%e :!a!又是什么意思?
作者: batman    时间: 2011-5-12 23:27

%%~1是为了去掉%%1字符串中两边的引号

%%1可以作为for中的变量,不但如此%%+ %%.都可以,只是不常用罢了

!a!见变量延迟相关资料
作者: ge_xin_yu    时间: 2011-5-13 00:46

本帖最后由 ge_xin_yu 于 2011-5-13 01:12 编辑

6# batman

测试了一下,%%~1确实可以去除两边的引号,这个功能在批处理教程中似乎都未提到,我又测试了其他的符号,结论是只能去除引号,对于其他符号无效果,~是移位符,%%~1怎么理解呢? 我去除引号是用的set命令,比这个麻烦多了。。

如下的代码并不能去除字符串a中的引号,窗口一闪而过,请问版主是什么原因?
@ echo off
set a="bbs.bathome.cn"
echo %~a%
pause
作者: hanyeguxing    时间: 2011-5-13 03:37

只有 for 参数 %%a 扩展 %%~a 或批参数 %1 扩展 %~1 才可以这样用,其他变量不可以这样直接去掉最外左右的引号




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