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

[问题求助] PowerShell正则怎样取两个%之间的文本?

我想用正则取下面每行中两个%之间的文本,即红色字部分,
用了两种代码, 但是都没完全搞定, 求大侠指引两种方法解决方案, 提前感谢!


Unche %P_Ou%; Value; DeviceID%
anch; %P_Er%; Text%
bncheck %S_Bt%; Val%;
  1. $dd= @"
  2. Unche %P_Ou%; Value; DeviceID%
  3. anch; %P_Er%; Text%
  4. bncheck %S_Bt%; Val%;
  5. "@
  6. $dd -match '%([^%]*)%'
  7. $matches
复制代码
  1. @"
  2. Unche %P_Ou%; Value; DeviceID%
  3. anch; %P_Er%; Text%
  4. bncheck %S_Bt%; Val%;
  5. "@ | Select-String -Pattern '(?m)%([^%]*)%' -AllMatches |
  6. Foreach-Object { $_.Matches.Value }
复制代码
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

  1. $dd= @"
  2. Unche %P_Ou%; Value; DeviceID%
  3. anch; %P_Er%; Text%
  4. bncheck %S_Bt%; Val%;
  5. "@
  6. $dd -replace '.*?%([^%]*)%.*','$1'
  7. @"
  8. Unche %P_Ou%; Value; DeviceID%
  9. anch; %P_Er%; Text%
  10. bncheck %S_Bt%; Val%;
  11. "@ | Select-String -Pattern '(?m)%([^%]*)%.*$' -AllMatches |
  12. Foreach-Object { $_.Matches|%{$_.groups[1].value} }
复制代码
1

评分人数

TOP

本帖最后由 5i365 于 2022-9-29 19:44 编辑

回复 2# idwma

多谢大侠支招,
第一种方法比较干净利索, 但是用替换不太稳,


例如下面这个情况, 不需要的L4 L5没有删除

  1. $dd = @"
  2. Unche %P_Ou%; Value; DeviceID%
  3. anch; %P_Er%; Text%
  4. abc
  5. cde
  6. bncheck %S_Bt%; Val%;
  7. "@
  8. $dd -replace '.*?%([^%]*)%.*', '$1' -split '\r?\n'
复制代码
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

TOP

回复 3# 5i365
  1. $dd = @"
  2. Unche %P_Ou%; Value; DeviceID%
  3. anch; %P_Er%; Text%
  4. abc
  5. cde
  6. bncheck %S_Bt%; Val%;
  7. "@
  8. $dd -split '\n'|%{if($_ -match '%([^%]*)%'){$matches[1]}}
复制代码

TOP

回复 4# idwma

多谢, 这个相对好理解!
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

TOP

返回列表