如何取消字符串的 CamelCase 部分?

How To Un-CamelCase Part Of A String?

提问人:CJB 提问时间:10/20/2023 最后编辑:Wiktor StribiżewCJB 更新时间:10/25/2023 访问量:77

问:

我有一长串 Markdown 图像列表,例如:![116-BowlOfApples](./media/116-BowlOfApples.jpg)

我想取消 CamelCase 标题而不是文件名
以获得此结果:
![116-Bowl Of Apples](./media/116-BowlOfApples.jpg)

我正在使用:

(?<=[a-z])(?=[A-Z])

我得到

![Bowl Of Apples-VI](./media/Bowl Of Apples-VI.jpg)

如何将此正则表达式限制为方括号中的内容并保持文件名不变?

正则表达式 vim 正则表达式环形查询

评论

2赞 Rippo 10/20/2023
您能否编辑这个问题并向我们展示所需的结果,因为它有点模棱两可。谢谢
1赞 Wiktor Stribiżew 10/20/2023
您使用的编程语言是什么?
0赞 Wiktor Stribiżew 10/20/2023
或者,你在哪里做这件事?什么工具?
0赞 CJB 10/20/2023
Wictor、Perl 或其他任何环顾四周的东西;虽然我和 Vim 在一起会更开心。我刚刚看到了你关于在方形短裤之间替换字符而不是括号之间替换字符的答案。谢谢。
2赞 The fourth bird 10/20/2023
什么&1 &2

答:

0赞 Wiktor Stribiżew 10/23/2023 #1

Vim 解决方案可以是这样的

%s/\v(!\[[^][]*[a-z])@<=([A-Z][^][]*])@=/ /g

请参阅 .NET 等效正则表达式演示。我正在使用 .NET 选项,因为 Vim 和 .NET 正则表达式都支持后视断言中的可变宽度模式。

图案细节

  • \v- 非常神奇的模式
  • (!\[[^][]*[a-z])@<=- 紧跟在前面的位置
    • !\[[^][]*[a-z]- 一个子字符串,然后![
    • [^][]*- 零个或多个字符,而不是 和 字符[]
    • [a-z]- 小写 ASCII 字母
  • ([A-Z][^][]*])@=- 紧随其后的位置
    • [A-Z]- 大写 ASCII 字母
    • [^][]*- 除 和 之外的零个或多个字符[]
    • ]- 和一个字符。]