使用 regex/notepad++ 将 UPPERCASE: 更改为 Proper Case: that end with colon:

Change UPPERCASE: to Proper Case: that end with colon: using regex/notepad++

提问人:Hank K 提问时间:10/7/2022 更新时间:10/7/2022 访问量:48

问:

目前有以下我找到大写字母的地方:并将其更改为粗体并将其保留为大写字母:

我宁愿将其更改为粗体正确大小写:。

17
00:00:37,689 --> 00:00:39,863
BOTH: ♪ Put on a happy, happy, happy ♪

20
00:00:43,260 --> 00:00:44,651
MR. OWENS: Hello!

29
00:01:05,717 --> 00:01:07,413
NURSE #1: You want me to inject him?

56
00:02:29,061 --> 00:02:30,960
MALE NARRATOR: Two Sockatoos, one bullet...

844
00:46:57,418 --> 00:46:59,462
TOGETHER: Seriously?

这是我目前用来在修改它时查找和替换的内容:

Find 1U:    ([A-Z0-9][A-Z0-9. -',-:&@#]+)(?=:\B)
Replace 1:  \<b\>$1\<\/b\>

然后我用它来将第一个单词更改为正确的大小写,但不知道在涉及 SPACES 时如何使其工作。

Step #1 Make it lowercase after the above       <b>SANDRA</b>
---------------------------------------------------------------------
Find:       <b>([A-Z0-9][A-Z0-9. -',-:&@#]+)</b>
Replace:    <b>\L\1</b>

Step #2 Now change it to Proper Case            <b>sandra</b>
---------------------------------------------------------------------
Find:       <b>([a-z])
Replace:    <b>\U$1

好吧,别笑了,这是我能想到的最好的办法。仍然是带有正则表达式/记事本++的n00b

如果我能一步到位,那就太好了。

提前致谢

正则表达式 记事本++

评论


答:

1赞 Wiktor Stribiżew 10/7/2022 #1

你不能把这三个步骤打包成一个,但你可以用两个步骤来做。第一步是你的第一步,如果它按预期工作,你可以继续使用这种方法(替换为(请不要转义尖括号))。([A-Z0-9][A-Z0-9. -',-:&@#]+)(?=:\B)<b>$1</b>

下一步是将第一个单词 char 转换为大写字符,其余单词转换为小写字符。

查找内容替换为
(?:\G(?!^)|<b>)\s*\K(\w)(\S*)(?=.*?</b>:)\U$1\L$2

细节

  • (?:\G(?!^)|<b>) - <b>或上一场比赛的结束
  • \s*- 零个或多个空格
  • \K- 省略匹配的文本
  • (\w)- 第 1 组:单词字符
  • (\S*)- 第 2 组:除空格以外的任何零个或多个字符
  • (?=.*?</b>:)- 与紧跟任何零或多个字符(换行符字符除外)的位置匹配的正向前看,尽可能少,然后是 。</b>:

请参阅下面的演示和设置:

enter image description here

评论

1赞 Hank K 10/7/2022
非常感谢教授的课程,非常感谢。;-)