[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 11# WHY

感谢大佬解释,

我的软件执行后, 会添加一行, 行里只有一个  {  左面的空间也是对的, 把  { 换成 [123]就对了

TOP

回复 10# meixi


    ChatGPT瞎说,我来解释一下吧
$s -replace '^(?>[^{]*){(\r?\n[ \t]+)(?!\[123])', '$&[123]$1';

(?>[^{]*) 是固化分组(原子组),作用是禁止回溯,当匹配不成功时可以提高效率。有些流派支持,有些不支持。

'^(?>[^{]*)    #开头不是{字符,这样的字符重复0次或多次。
{              #接着是{字符
(\r?\n[ \t]+)  #接着是一个回车换行,多个空格或Tab字符,把这些字符存放到子匹配Groups[1]中(即$1中)
(?!\[123])     #后面不是[123],这个是零宽断言。
'

每种流派的正则并不完全相同,不可能做到通用。试试
$s -replace '^[^{]*{(\r?\n[ \t]+)(?!\[123])', '$0[123]$1';

TOP

本帖最后由 meixi 于 2023-4-10 07:27 编辑

回复 3# WHY

我用chatgpt解析了一下正则: 红色字部分不理解, 是解释错了吗?

问:
解释下面的正则式
$s -replace '^(?>[^{]*){(\r?\n[ \t]+)(?!\[123])', '$&[123]$1';

答:
这个正则表达式可以分成三部分:
^(?>[^{]*){ 匹配以 { 开头的行,并排除其中的尖括号 >。
(\r?\n[ \t]+) 匹配一个换行符后跟至少一个空格或制表符的字符序列,并将其捕获。
(?!\[123]) 使用负向零宽断言,判断匹配结果后面的字符串中是否不存在 [123]。
整个正则表达式的作用是匹配以 { 开头的行,但排除某些特定的行,只在需要的行前添加标记 [123]。

这个正则表达式在代码中的作用是如果某一行以 { 开头,但不是一些特定的行(即这些行中不存在 [123] 标记),就在这行前面添加 [123]。可以配合字符串替换函数使用,实现字符串的标记和修改。

TOP

回复 7# Five66

大佬, 能帮写个通用一些的正则吗? W大的正则, 我的软件不支持

TOP

回复 3# WHY


   W大, 我的软件不支持 正则中的 $&  写法, 但支持如下的写法,
$`  $'   $0   $1   $2   ${n}

TOP

我脑子不够使,只会分成多条代码来

TOP

回复 4# meixi


    已改

TOP

本帖最后由 meixi 于 2023-4-9 23:28 编辑

回复 3# WHY


    大佬, 正则中的下面两点看不懂, 能解释一下吗?  好像在有的软件中不通用
')' 和 '$&'

TOP

回复 3# WHY

多谢大佬帮忙!

下面这个要求能在上面正则中一并做判断吗?

处理前要先检查一下, { 下有没有 [123] 的行, 有的话, 就不要重复加了, 没有时才加!

TOP

本帖最后由 WHY 于 2023-4-10 00:01 编辑
  1. $s = @'
  2. zzz
  3. xxx
  4. abc bbb
  5. {
  6. [123]
  7. ccc
  8. {
  9. ddd
  10. }
  11. }
  12. '@
  13. #$num = '[' + (Get-Random -ma 999 -mi 100) + ']';
  14. $num = '[123]';
  15. $s -replace ('^(?>[^{]*){(\r?\n[ \t]+)(?!\' + $num + ')'), ('$&' + $num + '$1');
  16. pause
复制代码

TOP

下面正则还不完美

$s -replace '(?<=\{)\s*', " $num"

TOP

返回列表