标题: [问题求助] PowerShell正则怎样取两个%之间的文本? [打印本页]
作者: 5i365 时间: 2022-9-28 09:39 标题: PowerShell正则怎样取两个%之间的文本?
我想用正则取下面每行中两个%之间的文本,即红色字部分,
用了两种代码, 但是都没完全搞定, 求大侠指引两种方法解决方案, 提前感谢!
Unche %P_Ou%; Value; DeviceID%
anch; %P_Er%; Text%
bncheck %S_Bt%; Val%;- $dd= @"
- Unche %P_Ou%; Value; DeviceID%
- anch; %P_Er%; Text%
- bncheck %S_Bt%; Val%;
- "@
-
- $dd -match '%([^%]*)%'
- $matches
复制代码
- @"
- Unche %P_Ou%; Value; DeviceID%
- anch; %P_Er%; Text%
- bncheck %S_Bt%; Val%;
- "@ | Select-String -Pattern '(?m)%([^%]*)%' -AllMatches |
- Foreach-Object { $_.Matches.Value }
复制代码
作者: idwma 时间: 2022-9-29 17:46
- $dd= @"
- Unche %P_Ou%; Value; DeviceID%
- anch; %P_Er%; Text%
- bncheck %S_Bt%; Val%;
- "@
-
- $dd -replace '.*?%([^%]*)%.*','$1'
-
-
- @"
- Unche %P_Ou%; Value; DeviceID%
- anch; %P_Er%; Text%
- bncheck %S_Bt%; Val%;
- "@ | Select-String -Pattern '(?m)%([^%]*)%.*$' -AllMatches |
- Foreach-Object { $_.Matches|%{$_.groups[1].value} }
复制代码
作者: 5i365 时间: 2022-9-29 19:42
本帖最后由 5i365 于 2022-9-29 19:44 编辑
回复 2# idwma
多谢大侠支招,
第一种方法比较干净利索, 但是用替换不太稳,
例如下面这个情况, 不需要的L4 L5没有删除
- $dd = @"
- Unche %P_Ou%; Value; DeviceID%
- anch; %P_Er%; Text%
- abc
- cde
- bncheck %S_Bt%; Val%;
- "@
-
- $dd -replace '.*?%([^%]*)%.*', '$1' -split '\r?\n'
复制代码
作者: idwma 时间: 2022-9-29 20:08
回复 3# 5i365 - $dd = @"
- Unche %P_Ou%; Value; DeviceID%
- anch; %P_Er%; Text%
- abc
- cde
- bncheck %S_Bt%; Val%;
- "@
-
- $dd -split '\n'|%{if($_ -match '%([^%]*)%'){$matches[1]}}
复制代码
作者: 5i365 时间: 2022-9-29 20:22
回复 4# idwma
多谢, 这个相对好理解!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |