首页 > 解决方案 > 正则表达式替换方括号之间的字符,但不替换括号之间的字符

问题描述

我有一个 Markdown 链接列表,如下所示:

[filename-with-some-words](/001-folder/filename-with-some-words.md)
[title-with-other-words](/001-folder/title-with-other-words.md)
[other-words](/001-folder/other-words.md)

我想替换-出现在方括号之间的[],而不是出现在括号之间的(),这样我的最终结果将如下所示:

[filename with some words](/001-folder/filename-with-some-words.md)
[title with other words](/001-folder/title-with-other-words.md)
[other words](/001-folder/other-words.md)

我可以匹配括号之间的所有(?<=\[).+?(?=\])文本,但我如何只匹配破折号-

标签: regexsublimetext3regex-lookarounds

解决方案


您可以使用

(?:\G(?!\A)|\[)[^][-]*\K-(?=[^][]*])

用空格代替。请参阅正则表达式演示

细节

  • (?:\G(?!\A)|\[)- 上一场成功比赛的结束或[
  • [^][-]*]- 除,[和之外的任何 0+ 个字符-
  • \K- 匹配重置运算符从整个匹配内存缓冲区中丢弃到目前为止匹配的所有文本
  • -- 一个连字符
  • (?=[^][]*])- 后面是 0+ 个非括号字符,直到一个]字符。

推荐阅读