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");

который может (как правило,...) быть вставлен в выражение при необходимости