RegEx для извлечения числовых шаблонов - PullRequest
2 голосов
/ 18 апреля 2019

Я получил сложную строку, подобную этой:

x <- "Lab ID : 11.11111 4\\nStatus : Final(F)\\nValue : 0.4 %\\nLow range:  0\\nHigh range:  2\\n"

Интересно значение 0.4 - поэтому всегда числовой шаблон сразу после Value :

Пока я пробовалследующее:

y <- gsub(".*Value : \\s*|\\\\.*", "", x)

Затем:

gsub("[^0-9\\.-][^\\s]+", "", y)

Проблема состоит в том, что числовой шаблон может принимать любое положительное или отрицательное значение и иногда за ним следует больше числовых шаблонов (например, 0.4 10E9/ml).Более того, это усложняется тем фактом, что за Value : также могут следовать символьные значения (например, Value : pending \\nLow ...

Я пытаюсь добиться извлечения в одну строку надежным способом.

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 18 апреля 2019

Вы можете использовать

regmatches(x, regexpr("Value\\s*:\\s*\\K-?\\d+(?:\\.\\d+)?", x, perl=TRUE))

См. Демоверсию regex и демоверсию R онлайн .

Подробнее

  • Value - буквальная подстрока
  • \s*:\s* - двоеточие, заключенное в 0+ пробелов
  • \K - оператор сброса совпадений, который отбрасывает весь сопоставленный текст из буфера памяти совпадений
  • -? - необязательный минус
  • \d+ - 1+ цифр
  • (?:\.\d+)? - необязательная последовательность точки и 1+ цифр.
0 голосов
/ 18 апреля 2019

Не уверен, что это RegEx будет охватывать все ваши возможные входные данные:

[0-9\s\.]+%

enter image description here

0 голосов
/ 18 апреля 2019

Мы можем использовать sub для сопоставления всей строки и замены на шаблон, который соответствует значению цифры:

x <- "Lab ID : 11.11111 4\\nStatus : Final(F)\\nValue : pending -0.4 10E9/ml %\\nLow range:  0\\nHigh range:  2\\n"

sub(".*Value\\s*:[\\s[:alpha:]]*(-?\\d+\\.\\d+).*", "\\1", x, perl = TRUE)
# [1] "-0.4"

Обратите внимание, что я изменил входную строку, чтобы продемонстрировать, что это регулярное выражение работает для всехв случаях, которые указала ФП.

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