Board logo

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

作者: 5i365    时间: 2022-3-4 14:13     标题: 用PS将多行并为一行,合并之前过滤掉不符合要求的行和字符

本帖最后由 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
复制代码

作者: went    时间: 2022-3-4 18:46

不能一步到位就多步
  1. $s -replace '(?m)(^\s*#.*$)|(#.*$)','' -replace '\r?\n',' ' -replace '\s+',' '
复制代码

作者: 5i365    时间: 2022-3-4 18:56

回复 2# went


    多谢帮忙, 请问最后两个替换, 不能用 ( | ) 这种方式吗?
作者: 5i365    时间: 2022-3-4 18:59

本帖最后由 5i365 于 2022-3-4 19:00 编辑

回复 2# went


    我试了一下, 没有这段也可以  -replace '\r?\n',' '  如果不加在什么情况会不稳呢?
作者: went    时间: 2022-3-4 20:19

回复 4# 5i365


    不加也行
作者: 5i365    时间: 2022-3-4 21:10

回复 5# went


    加上的话, 我还能理解, 就是把回车换行的地方用空格接起来了, 这不加了, 我反而理解不了了   ,能解释下吗?
作者: went    时间: 2022-3-4 22:16

-replace '\s+',' '
把一个或多个不可见字符替换成一个空格,包括\r\n和单独的一个\n
作者: 5i365    时间: 2022-3-4 22:26

回复 7# went


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

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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2