Просмотр вперед и назад в C#
Иногда условие для поиска находится рядом с нужным фрагментом, но само не должно попадать в замену. Для этого в регулярных выражениях используют просмотр вперед и назад.
Позитивный просмотр вперед (?=...)
проверяет, что после найденного фрагмента стоит
нужный текст. В следующем примере заменяется
только "aaa" перед "x":
using System.Text.RegularExpressions;
string txt = "aaax aaab";
string res = Regex.Replace(txt, @"aaa(?=x)", "!");
Console.WriteLine(res);
Негативный просмотр вперед (?!...)
делает обратную проверку: после фрагмента не
должно быть указанного текста. Теперь заменится
"aaa" не перед "x":
using System.Text.RegularExpressions;
string txt = "aaax aaab";
string res = Regex.Replace(txt, @"aaa(?!x)", "!");
Console.WriteLine(res);
Позитивный просмотр назад (?<=...)
проверяет текст перед фрагментом. Заменим
только "aaa", перед которым стоит
буква "x":
using System.Text.RegularExpressions;
string txt = "xaaa baaa";
string res = Regex.Replace(txt, @"(?<=x)aaa", "!");
Console.WriteLine(res);
Негативный просмотр назад (?<!...)
проверяет, что перед найденным фрагментом нет
указанного текста:
using System.Text.RegularExpressions;
string txt = "xaaa baaa";
string res = Regex.Replace(txt, @"(?<!x)aaa", "!");
Console.WriteLine(res);
Дана строка, содержащая имена функций:
string txt = "func1() func2 test()";
Найдите имена, после которых сразу идут круглые скобки, и выведите их списком.
Дана строка с ценами:
string txt = "$10 20 $30";
Найдите числа, перед которыми стоит знак доллара, и выведите их списком.