В следующем коде я хочу захватить все, что начинается с теста, а затем текст, заключенный в двойные кавычки. Например.C# Группа захвата регулярных выражений не работает
test"abc"
test"rst"
код работает отлично.
private void testRegex()
{
string st = "this test\"abc\"= or test\"rst\"\"uvw\" or test(def)(abc) is a test.";
Regex oRegex = new Regex("test\".*?\"");
foreach (Match mt in oRegex.Matches(st))
{
Console.WriteLine(mt.Value);
}
}
Тогда из приведенных выше захватов, я хочу, чтобы захватить подвыражения, которые следуют за тестом слова (в приведенном выше примерах этих подвыражений бы «а» и «первые» в то числе». Я попытался следующие, и правильно дает мне:
"abc"
"rst"
private void testRegex()
{
string st = "this test\"abc\"= or test\"rst\"\"uvw\" or test(def)(abc) is a test.";
Regex oRegex = new Regex("test(\".*?\")");
foreach (Match mt in oRegex.Matches(st))
{
Console.WriteLine(mt.Groups[1].Value);
}
}
Вопрос: Теперь я хочу захватить два подвыражения 1. «abc» и «rst» 2. Любой символ, кроме «который следует за совпадением« abc »и« rst ». Итак, я попробовал следующее, но, как показано ниже, группы 1 и 2 для матча «rst» «uvw» неверны. Мне нужна 1-я группа «первого» «UVW» быть «первым» и 2-й группы, чтобы быть пустым, так как символ, который следует «сначала» является «:
Группа 1:„а“
Группы 2: =
Группа 1: "первый"»
Группа 2: и
private void testRegex()
{
string st = "this test\"abc\"= or test\"rst\"\"uvw\" or test(def)(abc) is a test.";
Regex oRegex = new Regex("test(\".*?\")([^\"])");
foreach (Match mt in oRegex.Matches(st))
{
Console.WriteLine(mt.Groups[1].Value);
Console.WriteLine(mt.Groups[2].Value);
}
}
сделали бы это точно так же, за исключением того, что last '?' кажется более интуитивным, если вы поместите его внутри группы. – maraca
Ввод? внутри группы будет изменен номер группы следующей группы (если таковой существует). Мне нравится ? вне группы – jdweng
@stribizhev, спасибо. Это сработало. В моем коде на C# мне пришлось сбежать из «сделать это:' test (\ "[^ \"] * \ ") ([^ \"])?' – nam