带有正则表达式反转的 stringr 包 str_extract()
stringr package str_extract() with inversion of the regex
我有如下字符串:
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
为了进一步澄清,我希望它 return 原样的字符串,如果它不是以点和一位数字结尾的话。
以下示例:
> 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"
str_extract(s, ([\w ]+(?:\.|\-)){7})
然后你可以访问返回的字符串到它的长度-1,它会给你所需的输出!
PS:您可能需要使用转义字符。
试试这个正则表达式:
^.*(?=\.\d+$)|^.*
一个选项是替换最后一位,
sub("\.\d$", '', s)
您可以使用 stringr::str_remove()
例如:
s <- '14ed0d69fa2.bbd.7f5512.filter-132.21026.55B67C8E27.0'
stringr::str_remove(s, '(\.[0-9]{1})$')
#> [1] "14ed0d69fa2.bbd.7f5512.filter-132.21026.55B67C8E27"
我有如下字符串: 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
为了进一步澄清,我希望它 return 原样的字符串,如果它不是以点和一位数字结尾的话。
以下示例:
> 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"
str_extract(s, ([\w ]+(?:\.|\-)){7})
然后你可以访问返回的字符串到它的长度-1,它会给你所需的输出!
PS:您可能需要使用转义字符。
试试这个正则表达式:
^.*(?=\.\d+$)|^.*
一个选项是替换最后一位,
sub("\.\d$", '', s)
您可以使用 stringr::str_remove()
例如:
s <- '14ed0d69fa2.bbd.7f5512.filter-132.21026.55B67C8E27.0'
stringr::str_remove(s, '(\.[0-9]{1})$')
#> [1] "14ed0d69fa2.bbd.7f5512.filter-132.21026.55B67C8E27"