Использование RegEx для поиска и замены двойников - PullRequest
1 голос
/ 06 декабря 2009

Я хочу заменить все двойные токены в строке на двойное значение с добавлением буквы "c".Есть ли простой способ сделать это?Я подумал, что регулярное выражение - это путь, например,

, я хочу изменить следующее

treand60(12.3)/1010 + 1 >1010

на

treand60(12.3c)/1010c + 1c >123c

любые предложения

1 Ответ

2 голосов
/ 06 декабря 2009

Как правило, вы хотите найти все последовательности цифр, необязательно заканчивающиеся десятичной точкой и другой последовательностью цифр, а затем добавить 'c'. Вот пример, если вы используете Perl (ваш вопрос не говорит):

$_ = 'treand60(12.3)/1010 + 1 >1010';
s/\b\d+(?:\.\d+)?/$&c/g;
print;  # output is "treand60(12.3c)/1010c + 1c >1010c"

\d+ - это 1 или более цифр, а затем \.\d+ - это 1 или более цифр после десятичной точки. (?: ... ) является группой без захвата . Последний ? означает «соответствовать нулю или одному из них» (т.е. это необязательно). А \b означает совпадение только на границах слова (это предотвращает сопоставление чего-то вроде «Hello123», поскольку число идет сразу после символа слова).

Вот эквивалент C #:

using System.Text.RegularExpressions;
// ...

string input = "treand60(12.3)/1010 + 1 >1010";
Regex regex = new Regex(@"\b\d+(?:\.\d+)?");
string output = regex.Replace(input, (m) => m.Value + 'c');
Console.WriteLine(output);  // prints "treand60(12.3c)/1010c + 1c >1010c"

Лямбда-выражение внутри Regex.Replace является MatchEvaluator , который просто получает текст совпадения и добавляет 'c'.

...