Пакет stringr str_extract () с инверсией регулярного выражения

У меня есть такая строка: 14ed0d69fa2.bbd.7f5512.filter-132.21026.55B67C8E27.0

Следующее регулярное выражение извлекает последнюю часть, оканчивающуюся точкой и цифрой. Я хочу извлечь все, кроме этой части, и, похоже, не могу найти способ инвертировать регулярное выражение (использование ^) не помогает:

> s <- '14ed0d69fa2.bbd.7f5512.filter-132.21026.55B67C8E27.0'
> str_extract(s, '(\\.[0-9]{1})$')
[1] ".0"

Вместо этого я хочу, чтобы результат был:

[1] 14ed0d69fa2.bbd.7f5512.filter-132.21026.55B67C8E27

Чтобы уточнить, я хочу, чтобы он возвращал строку как есть, если она не заканчивается точкой и одной единственной цифрой.

Следующий пример:

> s <- '14ed0d69fa2.bbd.7f5512.filter-132.21026.55B67C8E27'
> str_extract(s, someRegex)
[1] "14ed0d69fa2.bbd.7f5512.filter-132.21026.55B67C8E27"
> s <- '14ed0d69fa2.bbd.7f5512.filter-132.21026.55B67C8E27.1'
> str_extract(s, someRegex)
[1] "14ed0d69fa2.bbd.7f5512.filter-132.21026.55B67C8E27"
> s <- '14ed0d69fa2.bbd.7f5512.filter-132.21026.55B67C8E27.4'
> str_extract(s, someRegex)
[1] "14ed0d69fa2.bbd.7f5512.filter-132.21026.55B67C8E27"

person Gopala    schedule 28.08.2015    source источник


Ответы (3)


Попробуйте это регулярное выражение:

^.*(?=\.\d+$)|^.*

Regex находится здесь.

person Community    schedule 28.08.2015
comment
Я могу отредактировать вопрос, но я не хочу, чтобы он отсекал все, что заканчивается более чем на одну цифру после последнего '.' - person Gopala; 28.08.2015
comment
@ user3949008. Простите за это. - person ; 28.08.2015

Один из вариантов - замена последнего бита,

sub("\\.\\d$", '', s)
person Rorschach    schedule 28.08.2015

str_extract(s, ([\w ]+(?:\.|\-)){7})

Затем вы можете получить доступ к возвращаемой строке до ее длины-1, и она даст вам требуемый результат!

PS: Возможно, вам придется использовать escape-символы.

person XOR-Manik    schedule 28.08.2015