假设我有一个字符串“\”Bob \“,\”1 \“,\”Mary \“,\”2 \“”。是否可以只删除数字周围的引号而不是字母?我已经尝试了前瞻/后退,但是后视的非可变长度搞砸了我,我不知道如何解决问题。感谢。
答案 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是索引。简而言之,正则表达式只用数字替换引号括起来的数字的所有出现。