【问题标题】:Extend string between strings在字符串之间扩展字符串
【发布时间】:2021-07-09 05:21:32
【问题描述】:
startABCend
->
startABC123end

我试图捕获startend 之间的文本,并对其进行扩展,如图所示。我试过了:

  • find = start.*end, replace = \1 123: 将捕获 startend 以及它们之间,但将它们全部替换
  • find = (?s)(?<=start).+?(?=end), replace = \1 123: 将保留 startend 但替换捕获

如何在 N++ 中使用正则表达式来实现这一点?


确切的用例是

func_name(a, b=1) -> func_name(a, b=1, c=2)
# can also be
func_name(g=5, k=7) -> func_name(g=5, k=7, c=2)
# so capture between `func_name(` and `)` and extend with `, c=2`

【问题讨论】:

标签: regex notepad++


【解决方案1】:

您可以在没有捕获组的情况下执行此操作,并匹配您要替换的内容。

\bstart\K.*?(?=end\b)

模式匹配:

  • \bstart 匹配 start 前面有一个单词边界
  • \K 忘记匹配到现在的内容
  • .*? 匹配尽可能少的字符
  • (?=end\b) 正向前瞻,将 end 断言到右侧,后跟单词边界

在替换中使用完整匹配,后跟 123

$&123


对于更新后的示例数据,您可以将key 的格式与可选的=value 匹配,并且可以选择在右侧重复断言)

\bfunc_name\([^\s,=]+(?:=[^\s,=]+)?(?:,\h*[^\s,=]+(?:=[^\s,=]+)?)*(?=\))

Regex demo

并替换为

$&, c=2

【讨论】:

  • +1,但我无法使其适应我的确切用例:func_name(a, b=1) --> func_name(a, b=1, c=2)。可以调整吗?
  • @OverLordGoldDragon 这些是不同的字符串格式。我为答案添加了另一种模式。
【解决方案2】:

您的示例目标不包括替换字符串中的空格。要完成使用组和附加数字,您可以使用括号。

基本上:

Find: (?<=start)(.+?)(?=end)
Replace: (\1)123

or just

Find: start(.+?)end
Replace: start(\1)123end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-24
    • 2014-11-12
    • 2015-08-29
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2018-06-16
    相关资源
    最近更新 更多