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

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

[复制链接]
发表于 2022-9-28 09:39:05 | 显示全部楼层 |阅读模式
我想用正则取下面每行中两个%之间的文本,即红色字部分,
用了两种代码, 但是都没完全搞定, 求大侠指引两种方法解决方案, 提前感谢!


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 }
复制代码
发表于 2022-9-29 17:46:17 | 显示全部楼层
  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技术 +1 收起 理由
5i365 + 1 技术牛X

查看全部评分

 楼主| 发表于 2022-9-29 19:42:49 | 显示全部楼层
本帖最后由 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'
复制代码
发表于 2022-9-29 20:08:07 | 显示全部楼层
回复 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]}}
复制代码
 楼主| 发表于 2022-9-29 20:22:34 | 显示全部楼层
回复 4# idwma

多谢, 这个相对好理解!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 23:15 , Processed in 0.019252 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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