双括号中子表达式的记事本++正则表达式ID

Notepad++ regexp ID of the sub-expressions in the double parentheses

我正在尝试在 Notepad++ 中查找这样的字符串:

'<a href="/mp3files/cards/Sentence With any Number of Words.mp3"></a>',

并将它们转换成这样:

'<a href="/mp3files/cards/sentence-with-any-number-of-words.mp3"></a>',

我创建了一个正则表达式来裁剪以 cards/ 开头并以 </a> 结尾的字符串:

(cards/)([^\s]{1,50})(([\s\.\?\!\-\,])(\w{1,50}))+(\.mp3"></a>)

或另一种方法:

(cards/)([^\s]{1,50})([\s\.\?\!\-\,]{0,})([^\s]{1,50})

两者都可以很好地用于搜索,但我找不到替代品。 问题是句子中的单词数量可能会有所不同。 而且我无法获取双括号中的子表达式的ID。

下面的替换格式:...是行不通的,因为我无法得到双括号中子表达式的正确ID。 我试图 google 该主题,但找不到任何内容。非常感谢任何建议,link 或最好的完整替换表达式。

这会将 /cards/ 之后的所有空格替换为连字符并将文件名小写。


  • Ctrl+H
  • 查找内容:(?:href="/mp3files/cards/|\G)\K(?!\.mp3)(\S+)(?:\h+|(\.mp3))
  • 替换为:\L(?2:-)
  • 检查 环绕
  • 检查 正则表达式
  • 全部替换

解释:

(?:                     # non capture group
    href="/mp3files/cards/  # literally
  |                       # OR
    \G                      # restart fro last match position
)                       # end group
(?!\.mp3)               # negative lookahead, make sure we haven't ".mp3" after this position
\K                      # forget all we have seen until this position
(\S+)                   # group 1, 1 or more non spaces
(?:                     # non capture group
    \h+                     # 1 or more horizontal spaces
  |                       # OR
    (\.mp3)                 # group 2, literally ".mp3"
)                       # end group

替换:

\L            # lowercase content of group 1
(?2             # if group 2 exists (the extension .mp3)
                  # use it
  :               # else
    -               # put a hyphen
)               # endif

截图(之前):

截图(后):