【问题标题】:Replace string outside "" only in Sublime using regular expression仅在 Sublime 中使用正则表达式替换 "" 之外的字符串
【发布时间】:2017-08-16 05:03:11
【问题描述】:

我的文件中有一个长长的字符串列表(大约 100k 行),如下所示:

job_title <- map["job_title"]
....

我想做一些替换,让它变成这样:

jobTitle <- map["job_title"]

所以我只是将_t 替换为T,但我只想要左侧。

【问题讨论】:

  • 你试过什么?请显示您尝试过的代码。
  • 我不知道该尝试什么=/

标签: regex sublimetext3


【解决方案1】:

如果将_t 替换为T,则无论上下文如何,都会将所有出现的_t 替换为T。

您可以尝试匹配所有"..." 子字符串并跳过它们,然后匹配_ 之后的任何字母并将其转换为大写。您如何匹配 "..." 子字符串取决于转义实体是否会出现在您的文本中。

如果不能有转义引号,

搜索:"[^"]*"(*SKIP)(?!)|_([A-Za-z])
替换:\u$1

如果有可以转义的引号:

搜索:"[^"\\]*(?:\\.[^"\\]*)*"(*SKIP)(?!)|_([A-Za-z])
替换:\u$1

详情:

  • "[^"\\]*(?:\\.[^"\\]*)*"(*SKIP)(?!) - 一个 "..." 子字符串(它匹配 ",然后是除 " 和 \ 之外的任何 0+ 字符,然后是任何转义字符 (\\.) 的 0+ 序列,然后是任何 0+ 字符除了" 和\,然后") 匹配然后从匹配中省略,在当前匹配结束后搜索下一个匹配(由于(*SKIP)(?!))
  • | - 或
  • _ - 一个 _ 字符
  • ([A-Za-z]) - 捕获组 1:任何 ASCII 字母

替换中的\u 运算符将其后的第一个字符变为大写。 $1 代表用([a-zA-Z]) 捕获的字母。

【讨论】:

    【解决方案2】:

    在您的情况下不需要正则表达式(按 Ctr+H 并全部替换)

    替换

    job_title <
    

    与:

    jobTitle <
    

    【讨论】:

    • 我想你不会明白我的意思。如果你使用,它将替换两个字符串。
    【解决方案3】:

    使用以下正则表达式,您只匹配第一个 _t

    (?<=^job)_(\w)
    

    所以你可以用 T 替换它。

    见https://regex101.com/r/VcpAzt/1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2017-04-26
      • 2015-02-27
      相关资源
      最近更新 更多