我有一个字符串,我想提取两个数字之间的所有字符(所有字符在开始和结束时没有scpaces)。事实上,情况有点棘手,因为有时字符串中有数字,有时没有。让字符串是:
my_string <- c("12 aöc-ABC 3 a", "43XY/zz23ab", "acs", "23 as c", "f~ds22 d", "1 3")
在本例中,我的预期输出是
expected_string <- c("aöc-ABC", "XY/zz", "acs", "as c", "f~ds", NA)
正如你所看到的,有时在相关部分之前和之后有数字(第1和第2个条目),有时根本没有数字(第3个条目),只有在感兴趣的部分之前或之后的数字(第4和第5个条目)或者只是没有我感兴趣的部分的数字(最后一个条目)。
我尽力了
gsub("^\\d*\\s*([^[:digit:]])+\\d*.*", "\\1", my_string)
但是我没有得到想要的输出,也不知道为什么。我真的很想使用gsub()来更好地理解正则表达式。这意味着我想避免使用strsplit(在这里可能更容易..)。希望有正则表达式大师可以帮助我!
5条答案
按热度按时间vsmadaxz1#
拆分空格、数字和空格,然后删除空字符串并取第一个组件(如果没有,则为NA)。
5hcedyr02#
以下是
stringr
选项sigwle7e3#
一种方法可能是用两个
sub
来完成这项工作,开始和结束处删除。如果需要,replace
""
后面还有NA
。mwyxok5s4#
以下是
tidyverse
解决方案:wbgh16ku5#
正如@GregorThomas在评论中指出的那样,我非常接近解决方案!因此,为了完整起见,这里更正了我的问题的代码
与所讨论的代码的唯一区别是加号在组内,而不是在组外。