stringr str_extract 捕获组捕获一切
stringr str_extract capture group capturing everything
我想从字符串中提取年份。这总是在 'X' 之后和“.”之前。然后是一串其他字符。
使用 stringr
的 str_extract
我正在尝试以下操作:
year = str_extract(string = 'X2015.XML.Outgoing.pounds..millions.'
, pattern = 'X(\d{4})\.')
我以为括号会定义捕获组,返回2015
,但我实际上得到了完整的匹配X2015.
我这样做正确吗?为什么我不修剪 "X" 和“.”?
捕获组在这种情况下无关紧要。函数 str_extract
将 return 整个匹配,包括捕获组前后的字符。
您必须改为使用后视和前视。它们的长度为零。
library(stringr)
str_extract(string = 'X2015.XML.Outgoing.pounds..millions.',
pattern = '(?<=X)\d{4}(?=\.)')
# [1] "2015"
此正则表达式匹配前面为 X
、后面为 .
的四个连续数字。
或者,您可以使用 gsub
:
string = 'X2015.XML.Outgoing.pounds..millions.'
gsub("X(\d{4})\..*", "\1", string)
# [1] "2015"
或 str_replace
来自 stringr
:
library(stringr)
str_replace(string, "X(\d{4})\..*", "\1")
# [1] "2015"
我相信最惯用的方法是使用 str_match
:
str_match(string = 'X2015.XML.Outgoing.pounds..millions.',
pattern = 'X(\d{4})\.')
其中 returns 完整匹配后跟捕获组:
[,1] [,2]
[1,] "X2015." "2015"
因此,以下内容可以解决问题:
str_match(string = 'X2015.XML.Outgoing.pounds..millions.',
pattern = 'X(\d{4})\.')[2]
我想从字符串中提取年份。这总是在 'X' 之后和“.”之前。然后是一串其他字符。
使用 stringr
的 str_extract
我正在尝试以下操作:
year = str_extract(string = 'X2015.XML.Outgoing.pounds..millions.'
, pattern = 'X(\d{4})\.')
我以为括号会定义捕获组,返回2015
,但我实际上得到了完整的匹配X2015.
我这样做正确吗?为什么我不修剪 "X" 和“.”?
捕获组在这种情况下无关紧要。函数 str_extract
将 return 整个匹配,包括捕获组前后的字符。
您必须改为使用后视和前视。它们的长度为零。
library(stringr)
str_extract(string = 'X2015.XML.Outgoing.pounds..millions.',
pattern = '(?<=X)\d{4}(?=\.)')
# [1] "2015"
此正则表达式匹配前面为 X
、后面为 .
的四个连续数字。
或者,您可以使用 gsub
:
string = 'X2015.XML.Outgoing.pounds..millions.'
gsub("X(\d{4})\..*", "\1", string)
# [1] "2015"
或 str_replace
来自 stringr
:
library(stringr)
str_replace(string, "X(\d{4})\..*", "\1")
# [1] "2015"
我相信最惯用的方法是使用 str_match
:
str_match(string = 'X2015.XML.Outgoing.pounds..millions.',
pattern = 'X(\d{4})\.')
其中 returns 完整匹配后跟捕获组:
[,1] [,2]
[1,] "X2015." "2015"
因此,以下内容可以解决问题:
str_match(string = 'X2015.XML.Outgoing.pounds..millions.',
pattern = 'X(\d{4})\.')[2]