Возьмем следующую строку:
x <- " hello world"
Я хотел бы извлечь первое слово. Для этого я использую следующее регулярное выражение ^\\W*([a-zA-Z]+).*
с обратной ссылкой на первую группу.
> gsub("^\\W*([a-zA-Z]+).*", "\\1", x)
[1] "hello"
Он работает так, как ожидалось.
Теперь давайте добавим цифру и подчеркнем нашу строку:
x <- " 0_hello world"
Я заменяю \\W
на [\\W_0-9]
, чтобы соответствовать новым символам.
> gsub("^[\\W_0-9]*([a-zA-Z]+).*", "\\1", x)
[1] " 0_hello world"
Теперь он не работает, и я не понимаю, почему. Кажется, проблема возникает при помещении \\W
в []
, но я не уверен, почему. Однако регулярное выражение работает на онлайн-тестере регулярных выражений с использованием PCRE.
Что я делаю не так?
sub("^[ 0-9]*([a-zA-Z]+).*", "\\1", x,)
- person akrun   schedule 03.03.2019perl = TRUE
т.е.sub("^[\\W_0-9]*([a-zA-Z]+).*", "\\1", x, perl = TRUE)
Здесь я используюsub
, потому что мы сопоставляем это только один раз - person akrun   schedule 03.03.2019perl=TRUE
устранил проблему. Можете ли вы сделать это как ответ, чтобы я мог принять его? Спасибо. - person Junitar   schedule 03.03.2019perl=TRUE
не является полным решением. Вам нужно добавить(?s)
перед регулярным выражением, поскольку в TRE.
соответствует любому символу, а в PCRE он соответствует любому символу, кроме символов разрыва строки. - person Wiktor Stribiżew   schedule 03.03.2019