Regex удаляет кавычки вокруг целых чисел?

Допустим, у меня есть строка "\"Боб\",\"1\",\"Мэри\",\"2\"". Можно ли убрать только кавычки вокруг цифр, а не буквы? Я пробовал смотреть вперед/назад, но непеременная длина для просмотра назад меня облажала, и я понятия не имею, как решить проблему. Спасибо.


person Michael    schedule 19.07.2011    source источник
comment
На каком языке вам требуется регулярное выражение?   -  person borrible    schedule 19.07.2011
comment
используя R прямо сейчас, но он может использовать синтаксис Perl   -  person Michael    schedule 20.07.2011


Ответы (1)


в php:

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

в джаваскрипте:

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() принимает регулярное выражение в качестве первого параметра в виде строки, значение замены в качестве второго параметра в виде строки и источник в качестве третьего параметра в виде строки и возвращает измененный строка после замены регулярного выражения.

Метод javascript .replace() работает с исходной строкой, принимает регулярное выражение в качестве первого параметра и строку замены в качестве второго параметра. Он возвращает измененную строку после замены регулярного выражения.

В этом примере регулярное выражение ограничено (начинается и заканчивается) косой чертой (/.../) и соответствует любой цифре (\d), заключенной в квадратные скобки ("(\d)") и заключенной в кавычки ("(\d)"). В javascript флаг g используется, чтобы сделать замены глобальными (повторять для всех вхождений). Захваченная цифра (захваченная, потому что она заключена в скобки) затем упоминается в замене с помощью $1, означающего первую захваченную группу. $0 соответствует всей совпавшей строке. $2 будет соответствовать второй захваченной группе, но в этом регулярном выражении ее нет. Все, что содержится в скобках в регулярном выражении, является захваченной группой, и на нее можно ссылаться при замене ее индексом через $n, где n - это индекс. Проще говоря, регулярное выражение заменяет все вхождения цифры, заключенной в кавычки, только этой цифрой.

person Billy Moon    schedule 19.07.2011
comment
используя R, который поддерживает регулярное выражение perl. Я видел этот синтаксис $ 1 раньше, но не знал, что это такое / как оно называется. может ли кто-нибудь объяснить, как это работает? - person Michael; 20.07.2011
comment
@Michael: я вижу, Билли обновил свой ответ; вот более общая информация: regular-expressions.info/refreplace.html - person Alan Moore; 20.07.2011