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

[问题求助] 求PowerShell更简单的正则解决方法

[复制链接]
发表于 2023-12-27 16:40:58 | 显示全部楼层 |阅读模式
功能已经实现的差不多了, 就是最后$s2Array的结果少了德国
另外,感觉用正则应该还有更简单的方法, 求路过大佬指导

功能描述如下:
#如果$s变量的文本的第1行是否以●●开头且行内包含★ 则:获取●●和第1个★之间的文本存到变量$s1
#再获取第1个★之后的文本存到$s2,并以★为分割符将文本分割成数组$s2Array, 注意每组文本前后的空格要删除
#尽量使用[regex]::Matches()方法结合合理的正则表达式来实现
  1. $s = @'
  2. ●● 中国 ★ 美国 ★ 日本 ★ 德国
  3. 你好
  4. 世界
  5. hello
  6. world
  7. '@

  8. # 按照规则提取$s1和$s2
  9. if ($s -match "(?m)^●●.*★")
  10. {
  11.         $s1 = [regex]::Matches($matches[0], '(?<=●●).*?(?=★)')[0].Value.Trim()
  12.         $s2 = [regex]::Matches($matches[0], '(?<=★).*')[0].Value.Trim()
  13.        
  14.         # 以★为分割符将文本分割成数组,并删除前后的空格
  15.         $s2Array = $s2 -split "★" | ForEach-Object { $_.Trim() }
  16.        
  17.         # 输出结果
  18.         $s1
  19.         '--------'
  20.         $s2Array
  21. }
复制代码
发表于 2023-12-27 18:24:13 | 显示全部楼层
if ($s -match "(?m)^●●.*★.*")
  1. $sArray = $s -split '\n'
  2. if ($sArray[0] -match '(?m)^●●(?<s1>.*?)★(?<s2>.*)') {
  3.     $s1 = $matches['s1'].Trim()
  4.     $s2 = $matches['s2'].Trim() -replace '(\s*)★(\s*)', "`n"
  5.     $s1
  6.     '------'
  7.     $s2
  8. }
复制代码

评分

参与人数 1技术 +1 收起 理由
小白龙 + 1 乐于助人

查看全部评分

发表于 2023-12-28 08:04:12 | 显示全部楼层
不知行否

  1. $s = @'
  2. ●● 中国 ★ 美国 ★ 日本 ★ 德国
  3. ★ 法国
  4. ★ 韩国
  5. 你好
  6. 世界
  7. hello
  8. world
  9. '@

  10. $m=[regex]::match($s,'(?m)^●●[^★]+(?=★)')
  11. if($m.Success){
  12. $s1=$m.value.Substring(2).trim()

  13. #跨行
  14. $r=[regex]::new('([\r\n\s]?★[^★\r\n]+)+',[Text.RegularExpressions.RegexOptions]16)
  15. $s2=$r.Match($s,$m.Index+$m.Length).value.replace("`r`n",'').split('★').where{$_}.trim()

  16. #不跨行
  17. #$r=[regex]::new('..*',[Text.RegularExpressions.RegexOptions]2)
  18. #$s2=$r.Match($s,$m.Index+$m.Length).value.split('★').where{$_}.trim()

  19. $s1
  20. '------'
  21. $s2
  22. }
复制代码

评分

参与人数 1技术 +1 收起 理由
小白龙 + 1 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 05:28 , Processed in 0.011596 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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