У меня есть довольно сложный RegEx, в котором у меня есть некоторые захватив группыДополнительно группа записи
, но это группы в большой группе, и эта большая группа является необязательной
здесь взгляд на ситуацию (я использовать Qt для этого, и QRegularExpression, но я предполагаю, что это на самом деле не имеет значения):
QRegularExpression regex("(.*)(?:([0-9]{2}) ([0-9]{2}) ([0-9]{2}))?(.*)");
Теперь я хочу, чтобы заменить матча
QString str = ".....some text....";
str.replace(regex, "\\1__\\3__\\5");
Возникла проблема, потому что, поскольку 3 группы захвата являются необязательными, иногда \\3
не существует.
То, что я хочу, чтобы получить пустую строку, если одна из группы захвата не существует:
если \\3
есть, я хочу:
"\\1__\\3__\\5"
, но если это не так, я хочу :
"\\1____\\5"
вот что я получу, если он не существует:
"...text...__\3__...text..."
я мог бы сделать это, очевидно, в двух или более регулярное выражение/замены и проверки наличия в между
Но это возможно сделать только в одном заменить? И как ? И что это лучший способ сделать это?
EDIT
Как amartel показать мне, нет никаких проблем, на самом деле моя ошибка заключалась в том, что я попытался получить доступ к 8-захвата, но там было только 7, так что \\ 8 возвращение меня \ 8
Регулярное выражение в вашем примере плохо, потому что оно соответствует пустой строке. Надеюсь, в реальном приложении все по-другому? Кроме того, вы используете синтаксис без захвата - может быть, проблема? – Amartel
Это просто пример, мое реальное регулярное выражение действительно сложно, я не вижу смысла писать его здесь. Если вы посмотрите поближе, вы увидите, что не-захват - это только одна группа, а не те, которые я хочу захватить. – BlueMagma