1) sub Соответствует началу строки (^) и затем захватывает M..Следующее совпадение пробелов, если оно есть, и затем захватывание всего до следующей точкиНаконец, сопоставьте все остальное.Замените это первым захватом (\ 1), пробелом и вторым захватом (\ 2).
Обратите внимание, что мы используем sub
вместо gsub
, поскольку для каждого компонента существует только одно общее совпадение.Кроме того, после М. ставится пробел, даже если у него его еще нет.
sub("^(M\\.) *([^.]+\\.).*", "\\1 \\2", v)
, что дает:
[1] "M. le président." "M. Gabriel Xaaperei."
[3] "M. Raymond Fornir, rapporteur."
2) read.table Это решение не использует регулярные выражения.Мы читаем в v
, используя поля, разделенные точками, а затем собираем их вместе, используя sprintf
.
with(read.table(text = v, sep = ".", fill = TRUE, strip.white = TRUE),
sprintf("%s. %s.", V1, V2))
, давая:
[1] "M. le président." "M. Gabriel Xaaperei."
[3] "M. Raymond Fornir, rapporteur."
3) paste / trimws /sub Использует несколько функций и только одно регулярное выражение, что относительно просто.Мы берем все, начиная с 3-го символа и далее, заменяя первую точку и все, что после нее, на точку, обрезаем пробел в случае, если она есть, и вставляем M. в начало.
paste("M.", trimws(sub("\\..*", ".", substring(v, 3))))
, давая:
[1] "M. le président." "M. Gabriel Xaaperei."
[3] "M. Raymond Fornir, rapporteur."
Добавить