空格更改str_match结果的顺序

时间:2019-07-03 04:18:13

标签: r tidyverse stringr

此刻,我使用 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"
> 

我是否可以仅通过更改正则表达式来解决此问题,还是应该先尝试清理空白(如果仅靠正则表达式就可以解决这一问题,这对我而言似乎是不必要的)?

1 个答案:

答案 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","(.*)-(.*)-(.*)-(.*)")