regex - 大括号内每个单词的首字母大写
问题描述
我正在尝试为 Tagscanner(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...
积极的后视 (?<=() 也不起作用,因为在我的第一次比赛之后,如果我再次有 '(' ,它会看起来。
还尝试捕获整个内容并将 * 放在后面也不起作用。
我只是不知道该怎么做。非常感谢您的帮助!
解决方案
Perl 从@Wiktor Stribiżew 的正则表达式重命名:
rename -n 's/(?:\G(?!^)|\()[^()]*?\K\b(\p{Ll})(\w*)/\U$1\E$2/gmu' Edith*
当输出看起来不错时移除-n
开关。
还有其他同名的工具可能会也可能不会这样做,所以要小心。
推荐阅读
- ios - Nativescript ActionBar 溢出到 iPhone 11 模拟器上的安全区域(缺口)
- python - Python:如何从字典列表中创建 csv 字符串(无文件)?
- xml - 在 xslt 中的“format-number()”中使用“current()”向左填充
- c# - 如何使用 lambda 表达式从列表中获取继承的对象成员
- git - 如何为具有私有 git 子模块的私有仓库设置 GitHub Actions CI 服务?
- variables - 并行 Jenkinsfile 任务中的局部变量
- reactjs - 如果组件中不存在 redux 存储中的值,则重定向用户
- html - 使用视频标签html5时如何在移动设备上显示视频缩略图
- delphi - Indy TCP SSL 多线程
- c - 如何使用 atmega 退出 USART ISR?