正则表达式以反转字符从软件中逃脱

时间:2013-12-11 22:56:42

标签: regex r perl

我有一个用于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是没有这些字符串的结果。

2 个答案:

答案 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)

尝试使用此正则表达式查找替换:

\Q$\backslash$\E

描述

Regular expression visualization

演示

Debuggex Demo