【问题标题】:Need to use Notepad++ RegExp to find and remove characters between curly brackets需要使用 Notepad++ RegEx 查找和删除大括号之间的字符
【发布时间】:2020-07-17 03:44:15
【问题描述】:

希望删除下面示例文本中 {} 之间的“#”字符

示例文本:

\(C##nH##{##2##n##+##1}O\)

预期输出:

\(C##nH##{2n+1}O\)

我尝试了什么?

\{[#].*\}
^.+?(?=##\w##)##\K|##(?!$)

非常感谢您的帮助!

【问题讨论】:

标签: regex notepad++ regex-lookarounds


【解决方案1】:

您可以使用以下模式:

(?:\{|(?<!^)\G)[^#\r\n]*\K#+(?=.*\})

..并用空字符串替换。

Demo.

细分:

(?:             # Beginning of a non-capturing group.
    \{          # Matches the character '{' literally.
    |           # Alternation (OR).
    (?<!^)\G    # Asserts position at the end of the previous match.
)               # End of the non-capturing group.
[^#\r\n]*       # Matches zero or more characters other than '#' or line breaks.
\K              # Resets the starting point of the match (only include what comes next).
#+              # Matches one or more '#' characters.
(?=.*\})        # A positive Lookahead to make sure the `}` character exists.

【讨论】:

  • 谢谢@Ahmed。如果 {} 之后有 ##,我会注意到一个问题。例如。 (C##nH##{##2##n}O##2)。这将转换为 (C##nH##{2n}O2) 而不是 (C##nH##{2n}O##2)。我想将替换限制为仅 {} 内的字符。
  • @Spykar 我无法重现这个。我得到的正是你所期望的输出。查看演示:regex101.com/r/Rn8iCr/1.
  • 不确定为什么 O##2 中的 ## 在我的 Notepad++ 中被删除。我真的很感谢你的帮助。否则您的解决方案运行良好:)
  • @Spykar 你是对的。我弄清楚了原因并相应地更新了答案。基本上,[^}]* 也在使用换行符,因此即使 } 字符位于不同的(后续)行中,前瞻也能正常工作。检查固定版本。
  • 现在完美运行!
【解决方案2】:

你可以使用

查找内容(\G(?!^)(?=[^}]*})|\{)([^#{}]*)#+
替换为$1$2

详情

  • (\G(?!^)(?=[^}]*})|\{) - 第 1 组(在替换模式中用 $1 指代):上一个匹配 (\G(?!^)) 的结尾,后跟除 } 之外的任何 0+ 字符,然后是 } 或(|){char
  • ([^#{}]*) - 第 2 组 ($2):除 #{} 之外的任何 0 个或多个字符
  • #+ - 一个或多个 # 字符

Notepad++ 演示和设置:

【讨论】:

  • 简要说明为什么我没有使用\K:很多人只是在 Notepad++ 中尝试使用正则表达式来查看它与他们的数据的匹配程度,然后在目标环境中使用模式,而不是它们都支持\K 运算符(例如Java、.NET、Python re)。
【解决方案3】:

我认为一种可能性是:

(?:\{|\G(?!^))[^#}]*\K#

然后什么都不替换。

在线查看demo


  • (?: - 打开非捕获组。
    • \{ - 匹配文字大括号。
    • | - 交替/或。
    • \G(?!^) - 在上一场比赛结束时断言位置,而不是在行首。
    • ) - 关闭非捕获组。
  • [^#}]* - 匹配除主题标签和右大括号之外的任何内容零次或多次。
  • \K- 重置比赛的起点。
  • # - 一个标签。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多