Проблема заключается в вашем втором регулярном выражении. Второе регулярное выражение имеет .+
, который является жадным квантификатором, соответствующим каждому символу. Первая группа попытается максимально соответствовать.
(6.0xxxx)(x)
В скобках указаны две группы, которые будут соответствовать вашему регулярному выражению.
Существует два способа решить эту проблему. Первый заключается в использовании ленивый квантор вместо жадного квантора:
/(.+?)(x+$)/
знак вопроса делает +
ленивый, только принимая наименьшее количество цифр возможных вместо всего. Это группа будет группироваться, как:
(6.0)(xxxxx)
Это то, что вы хотите.
Другой вариант заключается в том, чтобы сопоставлять, а не все возможные символы, все символы, которые не являются x
.
/(^[^x]+)(+x$)/
Карет внутри группы соответствия указывает, что соответствующая группа инвертирована (соответствует всем, что не является x). Это будет соответствовать всем до первого x
как группа 1, в результате чего будут созданы нужные группы.
или вы могли бы разделить строку и обратный его 'оборотов (strsplit («xxxxx6.0»,«(? <= (x)) (?! \\ 1) ', perl = TRUE) [[1]]) ' – rawr