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

[问题求助] PowerShell处理一对儿相匹配的行内的字符

[复制链接]
发表于 2022-10-19 15:40:42 | 显示全部楼层 |阅读模式
本帖最后由 5i365 于 2022-10-20 07:41 编辑

xxx 表示函数名, 它的正则是 ^[a-zA-Z_][a-zA-Z0-9_]*$

先获取所有的 function xxx(

再把每个 function xxx( 去匹配 $xxx( 开头的行(该行前可能有tab或空格)

如果能匹配到: 则先将该行开头的 $ 还有后面的 ,) 替换为空(即:删掉它们), 再将 ( 替换为一个空格

例如 function A( 能匹配到 $A( 开头的行, 则将该行由原来的 $A($p1, $p2) 改为 A $p1 $p2

___________________________________________处理前:

$A($p1, $p2)
$BB($p1)
$CCC()

function A($p1, $p2)
function BB($p1)
function CCC()

___________________________________________处理后:

A $p1 $p2
BB $p1
CCC

function A($p1, $p2)
function BB($p1)
function CCC()

___________________________________________代码:
  1. $s = @'
  2. $A($p1, $p2)
  3.         $BB($p1)
  4. $CCC()

  5. function A($p1, $p2)
  6. function BB($p1)
  7. function CCC()
  8. '@

  9. # 表示 xxx 的正则是 ^[a-zA-Z_][a-zA-Z0-9_]*$
  10. # 先获取所有的 function xxx(
  11. # 再把每个 function xxx( 去匹配 $xxx( 开头的行(该行前可能有tab或空格,要保留)
  12. # 如果能匹配到: 则先将该行开头的 $ 还有后面的 , 和 ) 替换为空(即:删掉它们), 再将 ( 替换为一个空格
  13. # 例如 function A( 能匹配到 $A( 则将该行按上面规则改为 A $p1 $p2
  14. # 最终输出效果如下:
  15. <#
  16. A $p1 $p2
  17.         BB $p1
  18. CCC

  19. function A($p1, $p2)
  20. function BB($p1)
  21. function CCC()
  22. #>

复制代码
 楼主| 发表于 2022-10-23 12:27:17 | 显示全部楼层
本帖最后由 5i365 于 2022-10-23 13:04 编辑

搞的差不多了,  但是结果重叠了

  1. $s = @'
  2. $A($p1, $p2)
  3.         $BB($p1)
  4. $CCC()

  5. function A($p1, $p2)
  6. function BB($p1)
  7. function CCC()
  8. '@

  9. $a = @()
  10. $s -split '\r?\n' |
  11. foreach {
  12.         if ($_ -match 'function ([a-zA-Z_][a-zA-Z0-9_]*\(.*\))')
  13.         {
  14.                 $a += $matches[1]
  15.         }
  16. }

  17. $a |
  18. foreach{
  19.         $r = '${0}' -f $_
  20.         $n = $r -replace '\(', ' ' -replace '\)' -replace ',' -replace '^\$'
  21.         
  22.         $s.Replace($r, $n)
  23. }

复制代码
 楼主| 发表于 2022-10-23 13:10:40 | 显示全部楼层
搞定

  1. $s = @'
  2. $A($p1, $p2)
  3.         $BB($p1)
  4. $CCC()

  5. function A($p1, $p2)
  6. function BB($p1)
  7. function CCC()
  8. '@

  9. @()
  10. $s -split '\r?\n' |
  11. foreach {
  12.         if ($_ -match 'function ([a-zA-Z_][a-zA-Z0-9_]*\(.*\))')
  13.         {
  14.                 $matches[1]
  15.         }
  16. } |
  17. foreach{
  18.         $r = '${0}' -f $_
  19.         $n = $r -replace '\(', ' ' -replace '\)' -replace ',' -replace '^\$'
  20.         $s = $s.Replace($r, $n)
  21. }

  22. $s
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 02:32 , Processed in 0.017823 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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