此刻,我使用 str_match 编写了一个正则表达式,用于提取字符串中第三个破折号(-)之后的信息。
问题是有时字符串中有空格,更改了输出列的顺序。
带空格:
> str_match("abc -xyz-a-**want**-12341", "(\\w+)-(\\w+)-(\\w+)-(\\w+)")
[,1] [,2] [,3] [,4] [,5]
[1,] "xyz-a-want-12341" "xyz" "a" "want" "12341"
没有空格:
str_match("abc-xyz-a-**want**-12341", "(\\w+)-(\\w+)-(\\w+)-(\\w+)")
[,1] [,2] [,3] [,4] [,5]
[1,] "abc-xyz-a-want" "abc" "xyz" "a" "want"
>
我是否可以仅通过更改正则表达式来解决此问题,还是应该先尝试清理空白(如果仅靠正则表达式就可以解决这一问题,这对我而言似乎是不必要的)?
答案 0 :(得分:0)
要继续您的思考过程,我们可以在每个捕获组中添加一个可选的空白参数。
library(stringr)
str_match("abc -xyz-a-want-12341","(\\w+\\s*?)-(\\w+\\s*?)-(\\w+\\s*?)-(\\w+\\s*?)")
# [,1] [,2] [,3] [,4] [,5]
#[1,] "abc -xyz-a-want" "abc " "xyz" "a" "want"
str_match("abc-xyz-a-want-12341", "(\\w+\\s*?)-(\\w+\\s*?)-(\\w+\\s*?)-(\\w+\\s*?)")
# [,1] [,2] [,3] [,4] [,5]
#[1,] "abc-xyz-a-want" "abc" "xyz" "a" "want"
如评论中所述,字符串中的任何地方都可以存在空格。在这种情况下,我们可以提取所有内容
str_match(" abc -xy z-a-wa nt-123 41","(.*)-(.*)-(.*)-(.*)")