在 Notepad++/Sublime Text 3 中,如何通过正则表达式将所有文本变为小写,但前提是行中出现特定短语?

在 Notepad++/Sublime Text 3 中,如何通过正则表达式将所有文本变为小写,但前提是行中出现特定短语?

假设我有这样的文字:

models/players/clonespac/CloneTorsoLieutenant
{
    q3map_nolightmap
    q3map_onlyvertexlighting
    {
        map models/players/clonespac/CloneTorsoLieutenant
        blendFunc GL_ONE GL_ZERO
        rgbGen lightingDiffuse
    }
    {
        map gfx/effects/clone
        blendFunc GL_DST_COLOR GL_SRC_COLOR
        tcGen environment
        blendFunc GL_SRC_ALPHA GL_ONE
        detail
        alphaGen lightingSpecular
    }
}

我想将所有字母转换为小写,但前提是该行包含单词“楷模”。

结果是:

models/players/clonespac/clonetorsolieutenant
{
    q3map_nolightmap
    q3map_onlyvertexlighting
    {
        map models/players/clonespac/clonetorsolieutenant
        blendFunc GL_ONE GL_ZERO
        rgbGen lightingDiffuse
    }
    {
        map gfx/effects/clone
        blendFunc GL_DST_COLOR GL_SRC_COLOR
        tcGen environment
        blendFunc GL_SRC_ALPHA GL_ONE
        detail
        alphaGen lightingSpecular
    }
}

我知道我可以这样做: (\w)->\L$1但它会替换每个字符。

我尝试这样做:

models (\w)->models \L$1但任何类似的尝试都失败了。

答案1

您可以使用:

^.*?[Mm]odels.*?$

解释:

  • ^- 匹配行的开头
  • .*?- 任何内容,非贪婪,位于您要查找的单词之后和之前
  • [Mm]odels- 不区分大小写models。将其包装在\bs 中以确保 egsomeothermodels不匹配。
  • $- 行结束

然后替换为:

\L$0

在 Notepad++/Sublime Text 3 使用的 Boost 正则表达式引擎中,这意味着\L将其后的任何内容都小写并且$0完全匹配,因此整行匹配。

相关内容