Board logo

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

作者: 5i365    时间: 2022-9-28 09:39     标题: 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 }
复制代码

作者: idwma    时间: 2022-9-29 17:46

  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} }
复制代码

作者: 5i365    时间: 2022-9-29 19:42

本帖最后由 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'
复制代码

作者: idwma    时间: 2022-9-29 20:08

回复 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]}}
复制代码

作者: 5i365    时间: 2022-9-29 20:22

回复 4# idwma

多谢, 这个相对好理解!




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