Выберите строку, заканчивающуюся первым символом в регулярных выражениях.

Скажем, у меня есть следующая строка:

pos/S881.LMG1810.QE009562.mzML 

И хотите 9X_regular-expressions выбрать начало этой строки:

pos/S881. 

Я могу использовать 9X_regexp следующее регулярное выражение, чтобы получить 9X_apache-regexp начало строки (^), затем любой символ (.), любое 9X_regexes количество раз (*), заканчивающееся десятичной 9X_regular-expression точкой (\.)

^.*\. 

Однако это заканчивается последним 9X_regular-expressions десятичным знаком в строке и, таким образом, дает 9X_rstats мне:

pos/S881.LMG1810.QE009562. 

Как завершить выделение на первом десятичном 9X_base-r знаке?

10
0
5
Общее количество ответов: 5

Ответ #1

Ответ на вопрос: Выберите строку, заканчивающуюся первым символом в регулярных выражениях.

Мы можем использовать поиск по регулярному 9X_perlre выражению ((?<=\\.)), чтобы сопоставить символы, которые 9X_regular-expression идут после ., и удалить символы с trimws

trimws(str1, whitespace = "(?<=\\.).*") [1] "pos/S881." 

Или извлеките 9X_regular-expression символы из начала (^) строки, которые не 9X_regular-expression являются . ([^.]+), за которыми следует точка 9X_apache-regexp (метасимвол, таким образом экранированный)

library(stringr) str_extract(str1, "^[^.]+\\.") [1] "pos/S881." 

данные

str1 <- "pos/S881.LMG1810.QE009562.mzML" 

13
0

Ответ #2

Ответ на вопрос: Выберите строку, заканчивающуюся первым символом в регулярных выражениях.

В качестве альтернативы просто используйте 9X_rstats sub():

s <- 'pos/S881.LMG1810.QE009562.mzML' sub("\\..*", ".", s) # [1] "pos/S881." 
  • \\..* — Соответствует буквальной точке, за которой следует 0+ символов.

10
0

Ответ #3

Ответ на вопрос: Выберите строку, заканчивающуюся первым символом в регулярных выражениях.

Принял ответ @akrun за их быстрый ответ, но 9X_regex обнаружил, что модификатор "?" делает 9X_stringr "*" не жадным в моем исходном 9X_regular-expression выражении, как написано.

stringr::str_extract("pos/S881.LMG1810.QE009562.mzML", "^.*?\\.") [1] "pos/S881." 

6
0

Ответ #4

Ответ на вопрос: Выберите строку, заканчивающуюся первым символом в регулярных выражениях.

Мы могли бы использовать strsplit:

С помощью функции 9X_perlre strsplit и индексации мы извлекаем нужную часть 9X_rstats строки:

strsplit(x, "\\.")[[1]][1] 
[1] "pos/S881" 

6
0

Ответ #5

Ответ на вопрос: Выберите строку, заканчивающуюся первым символом в регулярных выражениях.

Другой подход regexp использует sub вместе с шаблоном 9X_apache-regexp "(^.*?\\.).*" , например,

> sub("(^.*?\\.).*", "\\1", "pos/S881.LMG1810.QE009562.mzML") [1] "pos/S881." 

6
0