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

Mic*_*ael 1 regex lookahead lookbehind

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

Bil*_*oon 8

在PHP中:

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

在javascript中:

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

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

in <- "\"Bob\",\"1\",\"Mary\",\"2\""
out <- sub("\"([:digit:])\"","\\1",in)
print(out)
Run Code Online (Sandbox Code Playgroud)

......这里\\1相当于$1[:digit:]等同于\d

解释正则表达式

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

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

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

  • +1.Lookarounds在这里将是巨大的矫枉过正. (2认同)