Regex игнорирует среднюю часть захвата
Я хочу, чтобы одно регулярное выражение применительно к: "firstsecondthird" будет соответствовать "firstthird" (в одной группе, то есть в С# Match.Value
будет равно "firstthird" ).
Это возможно? мы можем игнорировать суффикс или префикс, но средний?
Ответы
Ответ 1
соответствует строке, начинающейся с "first", имеет ноль или более других символов, а затем заканчивается "третьим". Это то, что вы имеете в виду?
"^first(.*)third$"
Или, вы имеете в виду, если вы найдете строку "firstsecondthird", вырезаете все, кроме "первого" и "третьего"?
replace("^(first)second(third)$", "$1$2")
Ответ 2
Нет, нет возможности создать отдельную группу совпадений, содержащую несмежный текст из целевой строки. Вам нужно будет использовать замену или склеить сопоставимые группы в новую строку.
Ответ 3
AFAIK, это невозможно сделать с одним регулярным выражением. Вам нужно будет использовать вызов replace();
следующим образом:
String inputVar = "firstsecondthird";
String resultVar = Regex.replace(inputVar, "^(first)second(third)$", "$1$2");
который может (как правило,...) быть вставлен в выражение при необходимости