大括号内每个单词的首字母大写

时间:2019-04-03 21:39:58

标签: regex

我正在尝试为Tagscanner(Windows上的音乐标记器)编写一些有用的Regex,并在regex101.com上花了很多时间来实现我的想法。

在某些语言(例如法语)中,如果您将每个单词都大写,那么使标题看起来不错是一个巨大的痛苦。我只想将大括号中每个单词的首字母大写。我会收到这样的字符串:

伊迪丝·皮亚芙(Edith Piaf)-拉维恩·罗斯(Louis Armstrong 2015版)

我从这个基础开始:

/([a-z])([\w-']*)([\s\)\]\,;\d]*|$)/gi
that I replace by \U\1\E\2\3

([a-z]) I try to capture the letter I want in uppercase
([\w-']*) What I expect to be the rest of the word
([\s\)\]\,;\d]|$) Delimiters

这实际上将正确地在标题中的所有位置大写,然后出现问题...

我一直试图忽略一切,直到遇到'('

\(\K or \({1} or with \(\A or \((*SKIP) etc...

正向后看(?<=()也不起作用,因为在我第一次比赛之后 它将再次查看是否有'('。

也尝试捕获整个内容,并在*后面都放上*也不起作用。

我只是不知道该怎么做。非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

使用@WiktorStribiżew的正则表达式重命名Perl:

rename -n 's/(?:\G(?!^)|\()[^()]*?\K\b(\p{Ll})(\w*)/\U$1\E$2/gmu'  Edith*

当输出看起来不错时,请移除-n开关。

warning 有些其他具有相同名称的工具可能无法执行此操作,因此请小心。

cpan standalone script