标题: [问题求助] PowerShell处理一对儿相匹配的行内的字符 [打印本页]
作者: 5i365 时间: 2022-10-19 15:40 标题: PowerShell处理一对儿相匹配的行内的字符
本帖最后由 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()
___________________________________________代码:
- $s = @'
- $A($p1, $p2)
- $BB($p1)
- $CCC()
-
- function A($p1, $p2)
- function BB($p1)
- function CCC()
- '@
-
- # 表示 xxx 的正则是 ^[a-zA-Z_][a-zA-Z0-9_]*$
- # 先获取所有的 function xxx(
- # 再把每个 function xxx( 去匹配 $xxx( 开头的行(该行前可能有tab或空格,要保留)
- # 如果能匹配到: 则先将该行开头的 $ 还有后面的 , 和 ) 替换为空(即:删掉它们), 再将 ( 替换为一个空格
- # 例如 function A( 能匹配到 $A( 则将该行按上面规则改为 A $p1 $p2
- # 最终输出效果如下:
- <#
- A $p1 $p2
- BB $p1
- CCC
-
- function A($p1, $p2)
- function BB($p1)
- function CCC()
- #>
复制代码
作者: 5i365 时间: 2022-10-23 12:27
本帖最后由 5i365 于 2022-10-23 13:04 编辑
搞的差不多了, 但是结果重叠了- $s = @'
- $A($p1, $p2)
- $BB($p1)
- $CCC()
-
- function A($p1, $p2)
- function BB($p1)
- function CCC()
- '@
-
- $a = @()
- $s -split '\r?\n' |
- foreach {
- if ($_ -match 'function ([a-zA-Z_][a-zA-Z0-9_]*\(.*\))')
- {
- $a += $matches[1]
- }
- }
-
- $a |
- foreach{
- $r = '${0}' -f $_
- $n = $r -replace '\(', ' ' -replace '\)' -replace ',' -replace '^\$'
-
- $s.Replace($r, $n)
- }
复制代码
作者: 5i365 时间: 2022-10-23 13:10
搞定- $s = @'
- $A($p1, $p2)
- $BB($p1)
- $CCC()
-
- function A($p1, $p2)
- function BB($p1)
- function CCC()
- '@
-
- @()
- $s -split '\r?\n' |
- foreach {
- if ($_ -match 'function ([a-zA-Z_][a-zA-Z0-9_]*\(.*\))')
- {
- $matches[1]
- }
- } |
- foreach{
- $r = '${0}' -f $_
- $n = $r -replace '\(', ' ' -replace '\)' -replace ',' -replace '^\$'
- $s = $s.Replace($r, $n)
- }
-
- $s
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |