我有一个用于LaTeX的书目数据库文件,该文件由Mendeley软件生成。
该软件会转义所有LaTeX字符,例如\%{}等。这通常是受欢迎的,但我使用一个特殊的包装来显示化学分子,这就是出问题的地方。
原始表达式\ce{SnO2}
在文件中变为$\backslash$ce\{SnO2\}
。完整的字符串如下所示:
title = {{Large scale F-doped $\backslash$ce\{SnO2\} coating on glass by spray pyrolysis}},
我想删除整个$\backslash$
等表达式并恢复原始\ce{SnO2}
。
我觉得这是正则表达式的一个例子,但有点高于我的头。
我使用R并不是很糟糕,并且可以运行perl脚本,但我无法提出解决方案。我知道不提供任何代码是一种可怕的做法,但我希望这对于在正则表达式方面有所了解的人来说是单行的
修改
基于给出的答案,我提出了这个
#!/usr/bin/perl
use strict;
use warnings;
while (<>) {
s/\$\\backslash\$([^\\]+)\\{([^\\]+)\\}/\\$1\{$2\}/g;
print $_;
}
然后在Windows命令行中我使用了
perl test.pl testing.bib > result.bib
似乎有用。 testing.bib是包含不需要的字符的文件,而result.bib是没有这些字符串的结果。
答案 0 :(得分:1)
也许以下内容会有所帮助:
use strict;
use warnings;
my $string = 'title = {{Large scale F-doped $\backslash$ce\{SnO2\} coating on glass by spray pyrolysis}}';
$string =~ s/\$\\backslash\$([^\\]+)\\{([^\\]+)\\}/\\$1\{$2\}/g;
print $string;
输出:
title = {{Large scale F-doped \ce{SnO2} coating on glass by spray pyrolysis}}
作为一个单行:
perl -i.bak -ne 's/\$\\backslash\$([^\\]+)\\{([^\\]+)\\}/\\$1\{$2\}/g;print' inFile
单行将创建inFile.bak作为原始文件的备份。
答案 1 :(得分:0)