str = 'Text1.Text2(er2019).Text3(246)text.'
pat = '.*?\\.(.*?)\\(.*?\\)\\.(.*?)\\(.*'
substr = '\\1\\.\\2'
sub(pat, substr, str)
Я понял это, перейдя на regex101.com и играя до тех пор, пока не получу результаты.На regex101 я обнаружил, что этот шаблон .*?\.(.*?)\(.*?\)\.(.*?)\(.*
дал желаемый результат, но поскольку R обрабатывает \
как специальный символ, каждый \
становится \\
.
Вы хотите отбросить всетекст до и включая первый период.Таким образом, весь этот текст захвачен .*?\\.
.?
останавливает этот шаблон при первом совпадении, а не при последнем совпадении (называемом lazy match).
Затем мы хотим сохранить текст после этого первого периода до первого(
.(.*?)\\(
назначил текст между .
и (
для группы 1. Помещение ()
вокруг шаблона создает capturing group
, который вы можете использовать при замене.
Затем отбрасываем текст в скобках \\(.*?\\)\\.
.И мы повторяем образец для группы 2.