使用VS Code正则表达式查找并替换为小写字母,如果可能请使用\l或\L

80

有没有一种方法可以在匹配的字符串中使用正则表达式查找和替换所有大写字母为小写字母?最好在VS Code或IntelliJ中执行。我已经准备好我的正则表达式。

编辑:明确一点,我已经知道如何找到匹配项。但是我正在寻找用于替换所有大写匹配项为小写匹配项的函数。

2个回答

120

在编辑器中替换字符串(从版本1.47开始)和跨工作区查找/替换(从版本1.49开始,详见https://github.com/microsoft/vscode/pull/105101)支持大小写修改器\L\l\U\u

因此,您只需要在所有匹配的大写组前面加上\l修改器,例如:

\l$1 请参见regex101演示1

或者将\L放在所有替换内容的前面,例如:\L(rest of replace here)。请参见regex101演示2


请注意,这些修改器的使用方式与您可能习惯的方式有所不同。例如:

(de)(pth) 搜索

\U$1$2 替换

预期结果: DEPTH

vscode结果: DEpth

大小写修改器仅对立即的捕获组起作用,直到遇到\E或替换字符串的末尾才生效。

我认为出于同样的原因,\E未在vscode中实现,因为它对只修改立即捕获组这一事实毫无意义。

为了得到结果为DEPTH,你应该使用\U$1\U$2
修饰符也可以叠加使用-例如,\u\u\u$1将大写组的前三个字符,或者\l\U$1将第一个字符小写,其余大写。
目前,这些仅在编辑器的查找部件中支持,而不在“在文件中查找”中支持。
来源:https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_47.md#case-changing-in-regex-replacehttps://code.visualstudio.com/updates/v1_49#_workbench

1
如注释所述,已在1.47中发布。 - LosManos
值得注意的是,目前此功能仅在“查找和替换”中可用,而不在“文件中查找”中。 - alastairtree
@alastairtree 它可以在文件搜索中工作。你具体想做什么? - Mark
@Mark 谢谢,我意识到它只能使用$1+而不是像其他一些正则表达式工具那样使用$0。 - alastairtree

75
  • 按下 Ctrl + F
  • 选择 .* 按钮并输入你的正则表达式
  • 按下 Ctrl + Shift + L (Windows) 或 Cmd + Shift + L (Mac) 以选择所有匹配结果
  • 按下 Ctrl + Shift + P (Windows) 或 Cmd + Shift + P (Mac)
  • 选择 Transform to Lowercase

如果你只想修改某些匹配到的文本,需要额外执行一步。

如果在查找对话框中按下 Ctrl + Shift + L,它将选择完整的匹配文本,但你不能移动光标并进行部分选择。

输入正则表达式后,VSC会显示哪些部分会匹配到查找内容。

  • 点击文件中的某处
  • 按下 Ctrl + Shift + L (全选)

或者

  • 在查找对话框中按下 Alt + Enter

现在你可以移动光标并进行部分选择,然后应用所需的转换。


1
@Mark 我原以为重点在于编辑器,但是Shift+Ctrl+L也可以从搜索框中使用。每天都要学一件新事物。 - rioV8
当我尝试使用 Ctrl + Shift + L 时,我收到了这个消息:光标数量已被限制为10000。 - zwl
@zwl 这是在 VSC 中硬编码的限制,最多只能有 10000 个多光标,然后您必须分几部分操作或编写一个处理文件的 Python/Node 脚本。 - rioV8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接