正则表达式删除整数周围的引号?

时间:2011-07-19 08:06:29

标签: regex lookahead lookbehind

假设我有一个字符串“\”Bob \“,\”1 \“,\”Mary \“,\”2 \“”。是否可以只删除数字周围的引号而不是字母?我已经尝试了前瞻/后退,但是后视的非可变长度搞砸了我,我不知道如何解决问题。感谢。

1 个答案:

答案 0 :(得分:8)

在php中:

<?php
$in = "\"Bob\",\"1\",\"Mary\",\"2\"";
$out = preg_replace('/"(\d)"/',"$1",$in);
echo $out;
?>

在javascript中:

var $in = "\"Bob\",\"1\",\"Mary\",\"2\"";
var $out = $in.replace(/"(\d)"/g,"$1");
alert($out);

我对R的最佳猜测:(我不是R程序员)

in <- "\"Bob\",\"1\",\"Mary\",\"2\""
out <- sub("\"([:digit:])\"","\\1",in)
print(out)

...此处\\1相当于$1[:digit:]相当于\d

解释正则表达式

php preg_replace()函数将一个正则表达式作为字符串形式的第一个参数,一个替换值作为字符串形式的第二个参数,并将source作为第三个参数的形式一个字符串,并在正则表达式替换发生后返回修改后的字符串。

javascript .replace()方法对源字符串进行操作,将正则表达式作为第一个参数,将替换字符串作为第二个参数。它在正则表达式替换后返回修改后的字符串。

在此示例中,正则表达式由(开始和结束)斜杠(/.../)分隔,并匹配括号(\d)捕获的任何数字("(\d)")和用引号括起来("(\d)")。在javascript中,g标志用于使替换全局(重复所有出现)。然后在替换为$1时引用捕获的数字(因为它被括在括号中而被捕获),这意味着第一个捕获的组。 $0匹配整个匹配的字符串。 $2将匹配第二个捕获的组 - 但此正则表达式中没有。正则表达式中括号内包含的任何内容都是捕获的组,可以通过$n在其替换中引用,其中n是索引。简而言之,正则表达式只用数字替换引号括起来的数字的所有出现。