Я пытаюсь переместить все вхождения определенного шаблона в начало строки.Например, если шаблон 'pat' , то я бы хотел, чтобы моя подстановка регулярных выражений конвертировала
'a pat b pat c pat d'
до
'pat pat pat abc d'
Я мог бы добиться этого, неоднократно применяя
string <- gsub(x=string,pattern='(.*)(pat )(.*)',replacement='\\2\\1\\3')
к моей исходной строкезначение, но это требует циклического перебора строки произвольное количество раз, так как я не знаю, сколько раз ожидать, что шаблон будет встречаться в строке.Я также не могу просто использовать жадный подход, например применять подстановку столько раз, сколько длина строки, поскольку я работаю с чрезвычайно длинными векторами строк разной длины и применяю подстановки векторов.
Итак,Есть ли способ достичь этой функциональности с помощью одного выражения регулярного выражения?
РЕДАКТИРОВАТЬ
Похоже, что это невозможно сделать с помощью одного выражения регулярного выражения / gsub,Я должен предоставить более подробную информацию о том, почему это именно то, что мне нужно, когда другие решения будут делать в более ограниченных случаях:
Я работаю с большим набором данных (миллионы строк), содержащим строковое поле, на котором яхотите выполнить правила уборки.Эти правила состоят из списка замен регулярных выражений, указанных в отдельном файле;Есть несколько сотен из них.Процесс очистки выполняется путем зацикливания правил регулярных выражений и применения каждого ко всему строковому столбцу через векторизованную версию gsub
.
Для некоторых из этих правил, но не для всех, я хотел бы определить все экземпляры.определенного шаблона, затем переместите все такие экземпляры в начало строки.Указанный шаблон будет меняться от одного правила к другому, и поэтому ни одно решение, которое использует детали искомого шаблона, не является приемлемым.
Похоже, что я не смогу достичь своей цели без серьезной перестройки процесса, если у кого-то нет умных идей ...