Я работаю с большим количеством строк. Я понял, что могу прочитать их с помощью read.table(), но мне нужно предварительно очистить их.
У меня есть эта общая структура:
Request(123): \n Element1: 123123 \n Element2: 456456
Я хочу удалить только первое появление точки с запятой :, но не остальные.
Request(123) \n Element1: 123123 \n Element2: 456456
Пусть первая строка хранится в test. Прочитав пару тем, попробовал .*:
gsub(pattern = ".*:", replacement = "", x = test)
Я знаю, что вы можете использовать вопросительный знак для сделать поиск "ленивым", но я не смог заставить его работать.





g в gsub означает Глобальный, указывая, что он будет соответствовать всем вхождениям. Если вы используете sub вместо gsub, будет сопоставлено и заменено только первое вхождение. Подробнее см. ?gsub в Описание:
subandgsubperform replacement of the first and all matches respectively.
И, если вы хотите заменить только двоеточие, ваш шаблон должен быть просто ":", ".*:" будет соответствовать и заменять все до последнего двоеточия. Если вы хотите заменить все до первого двоеточия, сработает использование sub и ?, чтобы сделать * не жадным.
x = "Request(123): \n Element1: 123123 \n Element2: 456456"
## match everything up through last colon
sub(".*:", "", x)
# [1] " 456456"
## not greedy, match everything up through first colon
sub(".*?:", "", x)
# [1] " \n Element1: 123123 \n Element2: 456456"
## match first colon only
## since we don't need regex here, fixed = TRUE will speed things up
sub(":", "", x, fixed = TRUE)
#[1] "Request(123) \n Element1: 123123 \n Element2: 456456"
## compare to gsub, match every colon
gsub(":", "", x, fixed = TRUE)
# [1] "Request(123) \n Element1 123123 \n Element2 456456"
sub(":", "", test, fixed=TRUE)