标题: [问题求助] 求PowerShell更简单的正则解决方法 [打印本页]
作者: 小白龙 时间: 2023-12-27 16:40 标题: 求PowerShell更简单的正则解决方法
功能已经实现的差不多了, 就是最后$s2Array的结果少了德国
另外,感觉用正则应该还有更简单的方法, 求路过大佬指导
功能描述如下:
#如果$s变量的文本的第1行是否以●●开头且行内包含★ 则:获取●●和第1个★之间的文本存到变量$s1
#再获取第1个★之后的文本存到$s2,并以★为分割符将文本分割成数组$s2Array, 注意每组文本前后的空格要删除
#尽量使用[regex]::Matches()方法结合合理的正则表达式来实现- $s = @'
- ●● 中国 ★ 美国 ★ 日本 ★ 德国
- 你好
- 世界
- hello
- world
- '@
-
- # 按照规则提取$s1和$s2
- if ($s -match "(?m)^●●.*★")
- {
- $s1 = [regex]::Matches($matches[0], '(?<=●●).*?(?=★)')[0].Value.Trim()
- $s2 = [regex]::Matches($matches[0], '(?<=★).*')[0].Value.Trim()
-
- # 以★为分割符将文本分割成数组,并删除前后的空格
- $s2Array = $s2 -split "★" | ForEach-Object { $_.Trim() }
-
- # 输出结果
- $s1
- '--------'
- $s2Array
- }
复制代码
作者: buyiyang 时间: 2023-12-27 18:24
if ($s -match "(?m)^●●.*★.*")- $sArray = $s -split '\n'
- if ($sArray[0] -match '(?m)^●●(?<s1>.*?)★(?<s2>.*)') {
- $s1 = $matches['s1'].Trim()
- $s2 = $matches['s2'].Trim() -replace '(\s*)★(\s*)', "`n"
- $s1
- '------'
- $s2
- }
复制代码
作者: Five66 时间: 2023-12-28 08:04
不知行否- $s = @'
- ●● 中国 ★ 美国 ★ 日本 ★ 德国
- ★ 法国
- ★ 韩国
- 你好
- 世界
- hello
- world
- '@
-
- $m=[regex]::match($s,'(?m)^●●[^★]+(?=★)')
- if($m.Success){
- $s1=$m.value.Substring(2).trim()
-
- #跨行
- $r=[regex]::new('([\r\n\s]?★[^★\r\n]+)+',[Text.RegularExpressions.RegexOptions]16)
- $s2=$r.Match($s,$m.Index+$m.Length).value.replace("`r`n",'').split('★').where{$_}.trim()
-
- #不跨行
- #$r=[regex]::new('..*',[Text.RegularExpressions.RegexOptions]2)
- #$s2=$r.Match($s,$m.Index+$m.Length).value.split('★').where{$_}.trim()
-
- $s1
- '------'
- $s2
- }
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |