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

[问题求助] PowerShell能否用正则直接替换多行文本为特定格式的单行文本

[复制链接]
发表于 2022-4-16 09:14:22 | 显示全部楼层 |阅读模式
本帖最后由 5i365 于 2022-4-16 18:34 编辑

我想把A.txt中符合条件的"XXXX" 即最下面的红字部分, 前面添加ABC, 我写了下面的代码,

gc A.txt |
foreach {

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


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

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

2.如果多行中:
以#wub开头, 第二行是"xxxx", 且第三行有Y 且第四行有mou 则删除第三行第四行, 直接在第二行前添加ABC

示例:
之前:
#wub bob44 m ;;vb_运行
"Run VBS"
'Y
mou 0.5 0.5


之后:
#wub bob44 m ;;vb_运行
ABC "Run VBS"

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

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

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

#wub bob281 m ;;tei_移动
"Move Cursor "; 'Y; mou 0.5 0.7

#wub bob282 m ;;te_关闭
"Close Se"; 'Y; mou 0.3 0.5

#wub bob44 m ;;vb_运行
"Run VBS"
'Y
mou 0.5 0.5

#wub bob43 m ;;jss_代码
"Run Jaa"
'Y
mou 0.1 0.4

#wub bob51 m ;;wai_等待
"Wai for"; 'Y; mou 0.5 0.5

#wub bob43 m ;;jso_运行
"Run script"
'Y
mou 0.5 0.8

#wub bob7 m ;;jo_行业
"Run ppt"
"Run "
'Y
mou 0.5 0.8
 楼主| 发表于 2022-4-16 18:33:18 | 显示全部楼层
本帖最后由 5i365 于 2022-4-16 18:39 编辑

回复 2# idwma


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



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

#wub bob281 m ;;tei_移动
ABC "Move Cursor " 0.5 0.7

#wub bob282 m ;;te_关闭
ABC "Close Se" 0.3 0.5

#wub bob44 m ;;vb_运行
ABC "Run VBS" 0.5 0.5

#wub bob43 m ;;jss_代码
ABC "Run Jaa" 0.1 0.4

#wub bob51 m ;;wai_等待
ABC "Wai for" 0.5 0.5

#wub bob43 m ;;jso_运行
ABC "Run script" 0.5 0.8

#wub bob7 m ;;jo_行业
"Run ppt"
ABC "Run " 0.5 0.8
发表于 2022-4-16 18:47:44 | 显示全部楼层
回复 2# 5i365
  1. (gc A.txt) -join "`n" -replace '(".+");.*Y.*mou.*', 'ABC $1' -replace '(?<=#wub.*\n).*(".+").*\n.*Y.*\n.*mou.*','ABC $1'
复制代码

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 乐于分享, 技术牛X

查看全部评分

 楼主| 发表于 2022-4-16 20:50:18 | 显示全部楼层
回复 3# idwma


   大侠, 真是太牛X了, 正则运用的炉火纯青, 四两拨千金, 在下实在景仰, 感觉没有您处理不了的字符串难题!
 楼主| 发表于 2022-4-16 21:30:53 | 显示全部楼层
回复 3# idwma


输出后, 用notepad2打开, 会提示换行符不一致, 感觉和最前面的用\n 拼接字符串有关,
这也是我不明白的地方, 原来的每行文本后是\r\n  再用\n拼接  有点乱, 不拼不行吗? (?m) 这个好像可以直接处理多行, 加了一下, 没搞定
发表于 2022-4-17 14:42:48 | 显示全部楼层
回复 5# 5i365
  1. ((gc A.txt) -join "`n" -replace '(".+");.*Y.*mou.*', 'ABC $1' -replace '(?<=#wub.*\n).*(".+").*\n.*Y.*\n.*mou.*','ABC $1') -split '\n'
复制代码
 楼主| 发表于 2022-4-18 16:44:15 | 显示全部楼层
回复 6# idwma


   这个例子不错, 用\n 把 .的例外排除, 还能多行替换, 大侠实在是高
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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