Regex: извлечь число после строки, содержащей число - PullRequest
1 голос
/ 15 марта 2020

Предположим, у меня есть строка:

str <- "England has 90 cases(1 discharged, 5 died); Scotland has 5 cases(2 discharged, 1 died)"

Как узнать количество выписанных дел в Англии?

Я пытался

sub("(?i).*England has [\\d] cases(.*?(\\d+).*", "\\1", str),

Возвращает исходную строку. Большое спасибо!

Ответы [ 3 ]

1 голос
/ 15 марта 2020

Мы можем использовать str_match для захвата номера до "discharged".

stringr::str_match(str, "England.*?(\\d+) discharged")[, 2]
#[1] "1"
1 голос
/ 15 марта 2020

Мы можем использовать regmatches/gregexpr для сопоставления одной или нескольких цифр (\\d+), за которыми следует пробел, «разряженный» для извлечения количества разрядов

as.integer(regmatches(str, gregexpr("\\d+(?= discharged)", str, perl = TRUE))[[1]])
#[1] 1 2

Если указано c только в «Англия», начните с «Англия», за которым следуют символы tat, не являющиеся ( ([^(]+) и (, затем запишите цифры (\\d+) как группу, в замене укажите обратная ссылка (\\1) захваченной группы

sub("England[^(]+\\((\\d+).*", "\\1", str)
#[1] "1"

Или, если мы go опцией OP, ( следует экранировать, поскольку это метасимвол для захвата группы (после cases). Кроме того, \\d+ можно поместить за квадратные скобки

sub("(?i)England has \\d+ cases\\((\\d+).*", "\\1", str)
#[1] "1"
0 голосов
/ 15 марта 2020

регулярное выражение \ d + (? = Разряжено) и получает первое совпадение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...