Notepad++ 如何在记事本+中查找两个字符之间的文本并将其替换为一行中另两个字符之间的文本+;?

Notepad++ 如何在记事本+中查找两个字符之间的文本并将其替换为一行中另两个字符之间的文本+;?,notepad++,Notepad++,我有以下几行参考书目: @article{mehri_buckling_2016, title = {Buckling }, doi = {10.1016/j.cma.2016.01.017}} @article{jin_modified_2014, title = {A modified ns}, doi = {10.1016/j.apacoust.2014.04.007}} @article{sofiyev_free_2017, title = {The free}, doi = {10

我有以下几行参考书目:

@article{mehri_buckling_2016, title = {Buckling }, doi = {10.1016/j.cma.2016.01.017}}

@article{jin_modified_2014, title = {A modified ns}, doi = {10.1016/j.apacoust.2014.04.007}}

@article{sofiyev_free_2017, title = {The free}, doi = {10.1016/j.compositesb.2017.03.054}}

@article{malekzadeh_three-dimensional_2012, title = {Three-dimensional free }}

@article{jooybar_thermal_2016, title = {Thermal panels}, doi = {10.1016/j.tws.2016.01.032}}
在每一行中可能有
doi={…}
或没有。 如果行中有doi,我需要将
@article{……
之间的单词替换为
doi={……}

对于该示例,结果应为:

@article{10.1016/j.cma.2016.01.017, title = {Buckling }, doi = {10.1016/j.cma.2016.01.017}}

@article{10.1016/j.apacoust.2014.04.007, title = {A modified ns}, doi = {10.1016/j.apacoust.2014.04.007}}

@article{10.1016/j.compositesb.2017.03.054, title = {The free}, doi = {10.1016/j.compositesb.2017.03.054}}

@article{malekzadeh_three-dimensional_2012, title = {Three-dimensional free }}

@article{10.1016/j.tws.2016.01.032, title = {Thermal panels}, doi = {10.1016/j.tws.2016.01.032}}

你可以这样做:

  • 查找内容:
    ^(@article\{)。*?(,.*?doi=\{)(.*?\}
  • 替换为:
    \1\3\2\3}
  • 正则表达式:选中
  • 匹配换行:已清除
说明:

  • ^
    可能是可选的,但它确保匹配只能发生在行的开头
  • (@article\{)
    按字面意思匹配
    @article{
    。大括号必须用反斜杠转义,因为它是正则表达式中的一个特殊字符。括号使以后可以用
    \1
    引用此字符串。它是所谓的“捕获组”
  • *?
    将匹配任何一系列字符,但不超过获得完全匹配所需的数量(“惰性”):
    表示任何字符,
    *
    任意数量,
    但尽可能少以使其余字符正常工作
  • (,.*?doi=\{)
    匹配一个文字逗号,然后再匹配一些字符(参见上一点),后面是一个文字
    doi={
    。括号可以在以后将其称为
    \2
  • (.*)
    匹配许多字符(见上文)。括号使以后可以将其称为
    \3
    。这是与需要复制的实际文本匹配的部分
  • \}
    文字
    }
替换使用以下捕获组:

  • \1
    @article{
  • \3
    是需要复制的文本
  • \2
    是出现在
    doi={
    之间的任何内容,包括这两个文本
  • 重复执行
    \3
    以恢复
    doi
  • }
    是在“find”模式末尾匹配的右大括号。当然,我们也希望保留它

    • 您可以这样做:

      • 查找内容:
        ^(@article\{)。*?(,.*?doi=\{)(.*?\}
      • 替换为:
        \1\3\2\3}
      • 正则表达式:选中
      • 匹配换行:已清除
      说明:

      • ^
        可能是可选的,但它确保匹配只能发生在行的开头
      • (@article\{)
        按字面意思匹配
        @article{
        。大括号必须用反斜杠转义,因为它是正则表达式中的一个特殊字符。括号使以后可以用
        \1
        引用此字符串。它是所谓的“捕获组”
      • *?
        将匹配任何一系列字符,但不超过获得完全匹配所需的数量(“惰性”):
        表示任何字符,
        *
        任意数量,
        但尽可能少以使其余字符正常工作
      • (,.*?doi=\{)
        匹配一个文字逗号,然后再匹配一些字符(参见上一点),后面是一个文字
        doi={
        。括号可以在以后将其称为
        \2
      • (.*)
        匹配许多字符(见上文)。括号使以后可以将其称为
        \3
        。这是与需要复制的实际文本匹配的部分
      • \}
        文字
        }
      替换使用以下捕获组:

      • \1
        @article{
      • \3
        是需要复制的文本
      • \2
        是出现在
        doi={
        之间的任何内容,包括这两个文本
      • 重复执行
        \3
        以恢复
        doi
      • }
        是在“find”模式末尾匹配的右大括号。当然,我们也希望保留它

      添加了说明。添加了说明。