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

[问题求助] 用PS将多行并为一行,合并之前过滤掉不符合要求的行和字符

[复制链接]
发表于 2022-3-4 14:13:13 | 显示全部楼层 |阅读模式
本帖最后由 5i365 于 2022-3-4 15:02 编辑

想使用PS合并多行,但是想在合并之前过滤掉不符合要求的行和字符, 最好能在第12行之后,用正则替换的方法精简的实现, 求高手指点, 非常感谢!

***过滤规则描述:
1.每行之前和之后的空格要删掉
2.如果一行#开头, 则该行排除掉, 例如下面代码中的第7和第9行
3.如果一行之中有#号, 则从行首向右至第一个#, #和#之后的字符全过滤掉, 如果这个#前有空格则删掉空格,  例如下面代码中的第5和第6和第10行
4.经过上面处理后的所有行连成一行, 行与行之间用空格分隔, 下面的代码已经实现

期待结果
/Z /A /B /C=staa /D=staa /F=staa /H="Administrator" AAA

另外发现一个问题, -split "\r\n" , 有时要改成 -split "\n" 才能生效, 不知有没有更稳的办法
  1. $s = @'
  2. /Z
  3.    /A #中 国
  4. /B
  5.   /C=staa #日本
  6. /D=staa ##美 国
  7. # /E="AD" #台湾
  8.         /F=staa
  9.   # /G="Administrator"
  10. /H="Administrator" #
  11.    AAA
  12. '@ -split "\r\n" -join ' '

  13. $s
复制代码
发表于 2022-3-4 18:46:09 | 显示全部楼层
不能一步到位就多步
  1. $s -replace '(?m)(^\s*#.*$)|(#.*$)','' -replace '\r?\n',' ' -replace '\s+',' '
复制代码

评分

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

查看全部评分

 楼主| 发表于 2022-3-4 18:56:17 | 显示全部楼层
回复 2# went


    多谢帮忙, 请问最后两个替换, 不能用 ( | ) 这种方式吗?
 楼主| 发表于 2022-3-4 18:59:27 | 显示全部楼层
本帖最后由 5i365 于 2022-3-4 19:00 编辑

回复 2# went


    我试了一下, 没有这段也可以  -replace '\r?\n',' '  如果不加在什么情况会不稳呢?
发表于 2022-3-4 20:19:39 | 显示全部楼层
回复 4# 5i365


    不加也行
 楼主| 发表于 2022-3-4 21:10:35 | 显示全部楼层
回复 5# went


    加上的话, 我还能理解, 就是把回车换行的地方用空格接起来了, 这不加了, 我反而理解不了了   ,能解释下吗?
发表于 2022-3-4 22:16:21 | 显示全部楼层
-replace '\s+',' '
把一个或多个不可见字符替换成一个空格,包括\r\n和单独的一个\n
 楼主| 发表于 2022-3-4 22:26:35 | 显示全部楼层
回复 7# went


    多谢大侠指教, 一直以来以为\s 指的是空格, 刚刚百度了一下, 加深了理解

\s是指空白,包括空格、换行、tab缩进等所有的空白,

评分

参与人数 1技术 +1 收起 理由
went + 1 标记

查看全部评分

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

本版积分规则

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

GMT+8, 2026-3-17 06:48 , Processed in 0.021606 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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