找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 78526|回复: 16

[文本处理] [已解决]正则表达式替换等号后的字符

[复制链接]
发表于 2015-4-25 13:20:40 | 显示全部楼层 |阅读模式
本帖最后由 freesoft00 于 2015-4-25 20:53 编辑

示例文本如下:
[HKEY_LOCAL_MACHINE\0-SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Microsoft-Hyper-V-ClientEdition-Package~31bf3856ad364e35~x86~zh-CN~778899.009]
"InstallLocation"="\\\\?\\C:\\temp\\Dism\\IDABMWZB\\50DCE0F9-7402-4AD3-BBEC-1B7D1CB96C07\\"
需要把蓝色的部分替换为-减号。
想用文本编辑器软件的替换功能替换,这个正则式应该如何写呢?
第一个行的Packages\后面的值是不定的。
第二行都是"InstallLocation"开头的,等号后面的不同。
 楼主| 发表于 2015-4-25 13:22:40 | 显示全部楼层
为了说明问题,再加两行示例文本

[HKEY_LOCAL_MACHINE\0-SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Microsoft-Windows-ApisetNamespace-WOW64-Com-Package~31bf3856ad364e35~x86~zh-CN~99.89]
"InstallLocation"="\\\\?\\c:\\temp\\Dism\\IDABMWZB\\50DCE0F9-7402-4AD3-BBEC-1B7D1CB96C07\\"

[HKEY_LOCAL_MACHINE\0-SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages\Microsoft-Windows-ApisetNamespace-WOW64-Mincore-Package~31bf3856ad364e35~x86~zh-CN~6.77.00]
"InstallLocation"="\\\\?\\c:\\temp\\Dism\\IDABMWZB\\50DCE0F9-7402-4AD3-BBEC-1B7D1CB96C07\\"
发表于 2015-4-25 13:34:02 | 显示全部楼层
  1. (?<=tion"=").*(?=")
复制代码
 楼主| 发表于 2015-4-25 18:43:28 | 显示全部楼层
回复 3# bailong360


兄弟,是这样用吗?实验了不行呀。请告知,我不怎么会使用正则。
另外纯批处理可以解决这个问题也可以,省得用软件了。
发表于 2015-4-25 19:17:50 | 显示全部楼层
  1. @echo off & setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in ('findstr /n .* "测试.txt"')do (
  3. for /f "tokens=1* delims=:" %%b in ("%%a")do (
  4. set "str=%%c"
  5. if "!str:~1,15!" == "InstallLocation" (echo,"InstallLocation"=-) else (echo,%%c)
  6. )))>"结果.txt"
  7. pause
复制代码
发表于 2015-4-25 19:35:22 | 显示全部楼层
回复 4# freesoft00


可能你这个软件不支持零宽断言吧,我这里是notepad++
顺便楼上已经给出代码了
 楼主| 发表于 2015-4-25 20:05:44 | 显示全部楼层
回复 5# pcl_test


    多谢,我试试
 楼主| 发表于 2015-4-25 20:06:10 | 显示全部楼层
回复  freesoft00


可能你这个软件不支持零宽断言吧,我这里是notepad++
顺便楼上已经给出代码了
bailong360 发表于 2015-4-25 19:35

好的,我同意用++这个软件试试
 楼主| 发表于 2015-4-25 20:52:31 | 显示全部楼层
回复 5# pcl_test


    完美解决,good
 楼主| 发表于 2015-4-25 21:01:52 | 显示全部楼层
回复 6# bailong360
用++测试了,确实可以。
不过,体会后的结果又点不对。
结果是
"InstallLocation"="-"
等号后面多了两个引号
发表于 2015-4-25 21:19:51 | 显示全部楼层
我还以为要保留引号
  1. (?<=tion"=)".*"
复制代码
 楼主| 发表于 2015-4-25 22:25:16 | 显示全部楼层
回复 11# bailong360


    好的,同样完美解决
 楼主| 发表于 2015-7-22 12:23:30 | 显示全部楼层
回复 11# bailong360


    这个正则是任何等号后面的都可以体会,还是只有我上面的示例文件可以。
我又应用了其它的文档,发现不成功了,没有效果
发表于 2015-7-23 10:26:24 | 显示全部楼层
回复 13# freesoft00
  1. (?<==).*
复制代码
 楼主| 发表于 2015-7-23 17:31:40 | 显示全部楼层
回复 14# bailong360


    感谢,可以了。
不过还有点小问题。十六进制显示的注册表键值它的键值不在一行中。替换后只替换了第一行,而没有把后续的内容删除。例如
  1. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\lan\LanguageModel\it]
  2. "Resource1"=hex(2):58,00,3a,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,\
  3.   5c,00,53,00,4b,00,42,00,5c,00,4c,00,61,00,6e,00,67,00,75,00,61,00,67,00,65,\
  4.   00,4d,00,6f,00,64,00,65,00,6c,00,73,00,5c,00,6c,00,6d,00,2e,00,69,00,74,00,\
  5.   2d,00,67,00,72,00,61,00,6d,00,6d,00,61,00,72,00,2e,00,64,00,61,00,74,00,00,\
  6.   00
复制代码
正确的替换应该是
  1. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\lan\LanguageModel\it]
  2. "Resource1"=-
复制代码
而运行正则后的替换结果是
  1. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\lan\LanguageModel\it]
  2. "Resource1"=-
  3.   5c,00,53,00,4b,00,42,00,5c,00,4c,00,61,00,6e,00,67,00,75,00,61,00,67,00,65,\
  4.   00,4d,00,6f,00,64,00,65,00,6c,00,73,00,5c,00,6c,00,6d,00,2e,00,69,00,74,00,\
  5.   2d,00,67,00,72,00,61,00,6d,00,6d,00,61,00,72,00,2e,00,64,00,61,00,74,00,00,\
  6.   00
复制代码
当然这个问题如果不好解决就算了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 21:33 , Processed in 0.021119 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表