我的书目行很多,如下:
@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}}
答案 0 :(得分:3)
您可以这样做:
^(@article\{).*?(,.*?doi = \{)(.*?)\}
\1\3\2\3}
.
与换行符匹配:已清除 说明:
^
可能是可选的,但它确保匹配只能发生在行的开头。(@article\{)
从字面上匹配@article{
。大括号必须用反斜杠转义,因为它是正则表达式中的特殊字符。括号使以后可以使用\1
来引用此字符串。这就是所谓的“捕获小组” .*?
将匹配任意一系列字符,但不超过完全匹配(“惰性”)所需的字符:.
表示任何字符,*
表示任意数量的字符, ?
,但要使其余的工作尽可能少。(,.*?doi = \{)
匹配一个文字逗号,然后再匹配一些字符(请参见上一点),然后是一个文字doi = {
。括号使以后可以将其称为\2
。(.*?)
匹配多个字符(请参见上文)。括号使以后可以将其称为\3
。这是与需要复制的实际文本相匹配的部分。\}
文字}
。替换使用捕获组:
\1
是@article{
的同义词\3
是需要复制的文本\2
是,
和doi = {
之间出现的任何内容,包括这两个文本。\3
只是恢复doi
值。}
是在“查找”模式末尾匹配的右括号。我们当然也希望保留它。