我正在尝试为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...
正向后看(?<=()也不起作用,因为在我第一次比赛之后 它将再次查看是否有'('。
也尝试捕获整个内容,并在*后面都放上*也不起作用。
我只是不知道该怎么做。非常感谢您的帮助!
答案 0 :(得分:0)
使用@WiktorStribiżew的正则表达式重命名Perl:
rename -n 's/(?:\G(?!^)|\()[^()]*?\K\b(\p{Ll})(\w*)/\U$1\E$2/gmu' Edith*
当输出看起来不错时,请移除-n
开关。
有些其他具有相同名称的工具可能无法执行此操作,因此请小心。