gpt4 book ai didi

regex - awk、sed 或 vim 正则表达式

转载 作者:行者123 更新时间:2023-12-05 00:37:33 27 4
gpt4 key购买 nike

我正在寻找将字符串添加到现有字符串的最佳方法,而我不想替换整个字符串。

self.fields_desc.append(BitField("foo", 0x3, 4))

应替换为:
self.fields_desc.append(BitField("foo" + str(self.__class__.i), 0x3, 4))

使用哪种工具可以让我以更少的麻烦来做到这一点?在vim中我可以这样做:
:%s/self.fields_desc.append(BitField("[a-zA-Z0-9]*", 0x[0-9]*, [0-9]*))/self.fields_desc.append(BitField("foo" + str(self.__class__.i), 0x3, 4))/g

但我不知道如何告诉 vim 不要替换我写的正则表达式。你能帮我解决这个问题吗?

最佳答案

使用捕获组(注意“(”和“)”之前的“\”,以及“\1”、“\2”等):

:%s/self\.fields_desc\.append(BitField(\("[a-zA-Z0-9]*"\), \(0x[0-9]\+\), \([0-9]\+\)))/self.fields_desc.append(BitField(\1 + str(self.__class__.i), \2, \3))/g

变化:

self.fields_desc.append(BitField("foo", 0x3, 4))
self.fields_desc.append(BitField("test", 0x5, 3))



self.fields_desc.append(BitField("foo" + str(self.__class__.i), 0x3, 4))
self.fields_desc.append(BitField("test" + str(self.__class__.i), 0x5, 3))

笔记:
  • 我已将“.”转义为“.”匹配任何字符(换行符除外),并且您需要文字“。”特点。
  • 我已更换 *+对于数字匹配:我怀疑你想匹配 self.fields_desc.append(BitField("foo", 0x,)
  • 如果您不确定间距是否正确,即您并不总是有 self.fields_desc.append(BitField("foo", 0x3...但有时 self.fields_desc.append(BitField("foo",0x3self.fields_desc.append(BitField("foo", 0x3 ,然后添加 *在空格字符之后。虽然我建议改为标准化您的代码。

  • Regex groupingThe regex "dot" .

    正如 sidyll 所说,学习使用内置字符类“\d”、“\w”(参见 Shorthand character classes)等可能更好:

    :%s/self\.fields_desc\.append(BitField(\("\w*"\), \(0x\d\+\), \(\d\+\)))/self.fields_desc.append(BitField(\1 + str(self.__class__.i), \2, \3))/g

    这是为了简洁和可读性。此外,否则,读者会假设您有一些特殊的理由来定义自己的字符类(即,他们将阅读两次以确保其中没有未知字符)。

    关于regex - awk、sed 或 vim 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6761913/

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