gpt4 book ai didi

regex - Perl:正则表达式:捕获组

转载 作者:行者123 更新时间:2023-12-05 06:37:15 24 4
gpt4 key购买 nike

在代码文件中,我想删除代码文本和结束 之间的任何(一个或多个)连续白线(可能仅包含零个或多个空格/制表符,然后是换行符的行) block 。这个结尾的 } 前面可能有缩进空格,所以我想保留它们。

这是我尝试做的:

perl -i -0777 -pe 's/\s+\n([ ]*)\}/\n($1)\}/g' file

例如,如果我的代码文件看起来像(□ 是空格字符):

□□□□while (true) {\n
□□□□□□□□print("Yay!");□□□□□□\n
□□□□□□□□□□□□□□□□\n
□□□□}\n

然后我希望它变成:

□□□□while (true) {\n
□□□□□□□□print("Yay!");\n
□□□□}\n

但是它并没有像我预期的那样改变。知道我在这里做错了什么吗?

最佳答案

我能看到你的正则表达式的唯一问题是

  • 你不需要匹配变量周围的括号,和
  • 提取匹配时使用字符类是冗余(除非您想匹配制表符和空格)。

所以,你可以试试

s/\s+\n( *)\}/\n$1\}/g

相反。

在您的测试输入上运行时,这会按预期工作。

要进一步整理它,您可以尝试以下方法。

s/\s+(\n *\})/$1/g

如果可能有制表符和空格,您可以使用字符类。 (您不需要在字符类中包含“|”)。

s/\s+(\n[ \t]*\})/$1/g

关于regex - Perl:正则表达式:捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48001636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com