批处理之家's Archiver

5i365 发表于 2022-4-16 09:14

PowerShell能否用正则直接替换多行文本为特定格式的单行文本

[i=s] 本帖最后由 5i365 于 2022-4-16 18:34 编辑 [/i]

我想把A.txt中符合条件的[color=#ff0000]"XXXX" [/color][color=#0000ff]即最下面的红字部分, [/color]前面添加ABC, 我写了下面的代码,

gc A.txt |
foreach {

$_ -replace '(^".+");.+', 'ABC $1'
}


代码只能处理单行的情况, 另外正则, 也不完善, 会把下面的[color=#0000ff]蓝字[/color]也给改了, 不能改它, 因为不满足条件!

正则需要匹配的两种情况:
1.如果[size=12px]一行中:[/size]
[size=12px]"XXX"后面有; 且有Y 有mou, 则在[/size][size=12px]"XXX"前添加ABC后跟一个空格, [/size][size=12px]示例:[/size]
[size=12px]之前:[/size]
[color=#ff0000]"Close Session"[/color]; 'Y; mou 0.5 0.5
之后:
[color=#ff0000]ABC "Close Session"[/color]

[size=12px]2.如果多行中:[/size]
[size=12px]以#wub开头, 第二行是"xxxx", 且第三行有Y 且第四行有mou 则删除第三行第四行, 直接在第二行前添加ABC [/size]
[size=12px]
[/size][size=12px]示例:[/size]
[size=12px]之前:[/size]
#wub bob44 m ;;vb_运行
[color=#ff0000]"Run VBS"[/color]
'Y
mou 0.5 0.5


[size=12px]之后:[/size]
#wub bob44 m ;;vb_运行
[color=#ff0000]ABC "Run VBS"[/color]

对正则理解还不太深入, 期待路过高手指引, 提前感谢!

----------------------------------------------------------------------------------------------------------------------------------------------
A.txt 文本内容

[color=#0000ff]"Move Cur "[/color][size=12px]; 我不应该被处理[/size]

#wub bob281 m ;;tei_移动
[color=#ff0000]"Move Cursor "[/color]; 'Y; mou 0.5 0.7

#wub bob282 m ;;te_关闭
[color=#ff0000]"Close Se"[/color]; 'Y; mou 0.3 0.5

#wub bob44 m ;;vb_运行
[color=#ff0000]"Run VBS"[/color]
'Y
mou 0.5 0.5

#wub bob43 m ;;jss_代码
[color=#ff0000]"Run Jaa"[/color]
'Y
mou 0.1 0.4

#wub bob51 m ;;wai_等待
[color=#ff0000]"Wai for"[/color]; 'Y; mou 0.5 0.5

#wub bob43 m ;;jso_运行
[color=#ff0000]"Run script"[/color]
'Y
mou 0.5 0.8

#wub bob7 m ;;jo_行业
[color=#000000]"Run ppt"[/color]
[color=#000000]"Run "
[/color]'Y
mou 0.5 0.8

5i365 发表于 2022-4-16 18:33

[i=s] 本帖最后由 5i365 于 2022-4-16 18:39 编辑 [/i]

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=254363&ptid=62358]2#[/url] [i]idwma[/i] [/b]


   感谢大侠支招, 下面是输出结果
小数没有删除掉,
另外, 最后那几行不应该被处理, 因为不满足情况2
----------------------------------------------------------



"Move Cur "; 我不应该被处理

#wub bob281 m ;;tei_移动
ABC "Move Cursor " [color=#ff0000]0.5 0.7[/color]

#wub bob282 m ;;te_关闭
ABC "Close Se"[color=#ff0000] 0.3 0.5[/color]

#wub bob44 m ;;vb_运行
ABC "Run VBS" [color=#ff0000]0.5 0.5[/color]

#wub bob43 m ;;jss_代码
ABC "Run Jaa" [color=#ff0000]0.1 0.4[/color]

#wub bob51 m ;;wai_等待
ABC "Wai for" [color=#ff0000]0.5 0.5[/color]

#wub bob43 m ;;jso_运行
ABC "Run script" [color=#ff0000]0.5 0.8[/color]

[color=#ff0000]#wub bob7 m ;;jo_行业[/color]
[color=#ff0000]"Run ppt"[/color]
[color=#ff0000]ABC "Run " 0.5 0.8[/color]

idwma 发表于 2022-4-16 18:47

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=254368&ptid=62358]2#[/url] [i]5i365[/i] [/b][code](gc A.txt) -join "`n" -replace '(".+");.*Y.*mou.*', 'ABC $1' -replace '(?<=#wub.*\n).*(".+").*\n.*Y.*\n.*mou.*','ABC $1'[/code]

5i365 发表于 2022-4-16 20:50

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=254369&ptid=62358]3#[/url] [i]idwma[/i] [/b]


   大侠, 真是太牛X了, 正则运用的炉火纯青, 四两拨千金, 在下实在景仰, 感觉没有您处理不了的字符串难题! :P

5i365 发表于 2022-4-16 21:30

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=254369&ptid=62358]3#[/url] [i]idwma[/i] [/b]


输出后, 用notepad2打开, 会提示换行符不一致, 感觉和最前面的用\n 拼接字符串有关,
这也是我不明白的地方, 原来的每行文本后是\r\n  再用\n拼接  有点乱, 不拼不行吗? (?m) 这个好像可以直接处理多行, 加了一下, 没搞定 :lol

idwma 发表于 2022-4-17 14:42

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=254380&ptid=62358]5#[/url] [i]5i365[/i] [/b][code]((gc A.txt) -join "`n" -replace '(".+");.*Y.*mou.*', 'ABC $1' -replace '(?<=#wub.*\n).*(".+").*\n.*Y.*\n.*mou.*','ABC $1') -split '\n'[/code]

5i365 发表于 2022-4-18 16:44

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=254402&ptid=62358]6#[/url] [i]idwma[/i] [/b]


   这个例子不错, 用\n 把 .的例外排除, 还能多行替换, 大侠实在是高

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.