1

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

4

1 回答 1

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

解释正则表达式

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

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

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

于 2011-07-19T08:12:58.610 回答