标题: [文本处理] [已解决]正则表达式替换等号后的字符 [打印本页]
作者: freesoft00 时间: 2015-4-25 13:20 标题: [已解决]正则表达式替换等号后的字符
本帖最后由 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"开头的,等号后面的不同。
作者: freesoft00 时间: 2015-4-25 13:22
为了说明问题,再加两行示例文本
[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\\"
作者: bailong360 时间: 2015-4-25 13:34
复制代码
作者: freesoft00 时间: 2015-4-25 18:43
回复 3# bailong360
兄弟,是这样用吗?实验了不行呀。请告知,我不怎么会使用正则。
另外纯批处理可以解决这个问题也可以,省得用软件了。
作者: pcl_test 时间: 2015-4-25 19:17
- @echo off & setlocal enabledelayedexpansion
- (for /f "delims=" %%a in ('findstr /n .* "测试.txt"')do (
- for /f "tokens=1* delims=:" %%b in ("%%a")do (
- set "str=%%c"
- if "!str:~1,15!" == "InstallLocation" (echo,"InstallLocation"=-) else (echo,%%c)
- )))>"结果.txt"
- pause
复制代码
作者: bailong360 时间: 2015-4-25 19:35
回复 4# freesoft00
可能你这个软件不支持零宽断言吧,我这里是notepad++
顺便楼上已经给出代码了
作者: freesoft00 时间: 2015-4-25 20:05
回复 5# pcl_test
多谢,我试试
作者: freesoft00 时间: 2015-4-25 20:06
回复 freesoft00
可能你这个软件不支持零宽断言吧,我这里是notepad++
顺便楼上已经给出代码了
bailong360 发表于 2015-4-25 19:35
好的,我同意用++这个软件试试
作者: freesoft00 时间: 2015-4-25 20:52
回复 5# pcl_test
完美解决,good
作者: freesoft00 时间: 2015-4-25 21:01
回复 6# bailong360
用++测试了,确实可以。
不过,体会后的结果又点不对。
结果是
"InstallLocation"="-"
等号后面多了两个引号
作者: bailong360 时间: 2015-4-25 21:19
我还以为要保留引号复制代码
作者: freesoft00 时间: 2015-4-25 22:25
回复 11# bailong360
好的,同样完美解决
作者: freesoft00 时间: 2015-7-22 12:23
回复 11# bailong360
这个正则是任何等号后面的都可以体会,还是只有我上面的示例文件可以。
我又应用了其它的文档,发现不成功了,没有效果
作者: bailong360 时间: 2015-7-23 10:26
回复 13# freesoft00 复制代码
作者: freesoft00 时间: 2015-7-23 17:31
回复 14# bailong360
感谢,可以了。
不过还有点小问题。十六进制显示的注册表键值它的键值不在一行中。替换后只替换了第一行,而没有把后续的内容删除。例如- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\lan\LanguageModel\it]
- "Resource1"=hex(2):58,00,3a,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,\
- 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,\
- 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,\
- 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,\
- 00
复制代码
正确的替换应该是- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\lan\LanguageModel\it]
- "Resource1"=-
复制代码
而运行正则后的替换结果是- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\lan\LanguageModel\it]
- "Resource1"=-
- 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,\
- 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,\
- 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,\
- 00
复制代码
当然这个问题如果不好解决就算了。
作者: bailong360 时间: 2015-7-24 16:19
回复 15# freesoft00 - (?<==).*?((?=( *\n\r)|(\n *(\[|")))|(?!.))
复制代码
勾选 匹配新行
其实我自己都不知道这是什么鬼...
作者: freesoft00 时间: 2015-7-24 17:24
回复 16# bailong360
好的,行不行就这样吧,谢谢了!我试试。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |