【问题标题】:Capitalize First Letter of Every Word inside Bracket大括号内每个单词的首字母大写
【发布时间】:2019-08-25 13:07:09
【问题描述】:

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

在某些语言(例如法语)中,如果您将每个单词都大写,让标题看起来不错是一件非常痛苦的事情。我只想将圆括号中每个单词的第一个字母大写。我会收到这样的字符串:

Edith Piaf - La vie en rose(路易斯·阿姆斯特朗 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...

Positive lookbehind (?

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

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

【问题讨论】:

  • 您好@WiktorStribiżew 感谢您的快速回复。它在 regex101.com 上就像一个魅力。但是我的软件不喜欢它......结果给我:La vie en rose (\Ul\Eouis \Ua\Ermstrong 2015 \Uv\Eersion) 我会研究你的代码!这对我的理解有很大的提高。
  • @WiktorStribiżew 该软件不支持 \U\E 是时候换一个可以的了。还是非常感谢!!!
  • 当您决定选择什么环境时,请更新问题并通过评论告知。

标签: regex


【解决方案1】:

Perl 从@Wiktor Stribiżew 的正则表达式重命名:

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

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

还有其他同名的工具可能会也可能不会做到这一点,所以要小心。

cpan standalone script

【讨论】:

    猜你喜欢
    • 2020-08-30
    • 2016-12-05
    • 2015-11-10
    • 2016-12-23
    • 2015-11-04
    • 2017-08-02
    • 2012-11-11
    • 1970-01-01
    • 2013-12-15
    相关资源
    最近更新 更多