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

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

pos/S881.LMG1810.QE009562.mzML

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

pos/S881.

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

^.*\.

Однако это заканчивается последним 9X_r-language десятичным знаком в строке и, таким образом, дает 9X_base-r мне:

pos/S881.LMG1810.QE009562.

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

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

Ответ #1

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

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

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

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

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

данные

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

13
0

Ответ #2

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

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

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

10
0

Ответ #3

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

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

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

6
0

Ответ #4

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

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

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

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

6
0

Ответ #5

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

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

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

6
0