Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 解析字符串-提取结尾处的数字字符_R_String_Parsing - Fatal编程技术网

R 解析字符串-提取结尾处的数字字符

R 解析字符串-提取结尾处的数字字符,r,string,parsing,R,String,Parsing,解析R数据帧中的字符串字段对我来说有点神秘,我恐怕……如果能得到帮助,我将不胜感激 我有一个字符串字段,它总是以不确定数量的数字字符结尾。我想写一段代码,只提取每个结尾的数字部分 数据格式的一个示例是: df_test <- data.frame(my_string = c("XXX-0387", "XXXX-1-999999", "XXX 12345432", "XXX-2345", "XXX1234")) 请问有没有简单的方法 谢谢。一种使用sub捕捉字符串最后一部分的方法,即数字

解析R数据帧中的字符串字段对我来说有点神秘,我恐怕……如果能得到帮助,我将不胜感激

我有一个字符串字段,它总是以不确定数量的数字字符结尾。我想写一段代码,只提取每个结尾的数字部分

数据格式的一个示例是:

df_test <- data.frame(my_string = c("XXX-0387", "XXXX-1-999999", "XXX 12345432", "XXX-2345", "XXX1234"))
请问有没有简单的方法

谢谢。

一种使用sub捕捉字符串最后一部分的方法,即数字

sub('.*?(\\d+)$', '\\1', df_test$my_string)
#[1] "0387"     "999999"   "12345432" "2345"     "1234"  
使用stringr:

一种使用sub捕获字符串最后一部分的方法,即数字

sub('.*?(\\d+)$', '\\1', df_test$my_string)
#[1] "0387"     "999999"   "12345432" "2345"     "1234"  
使用stringr:

您可以将regexpr与\\d+$一起使用,以查找末尾的数字,并使用regmatches将其提取出来

您可以将regexpr与\\d+$一起使用,以查找末尾的数字,并使用regmatches将其提取出来

我们可以使用stri_extract_last从stringi中提取

我们可以使用stri_extract_last从stringi中提取


非常感谢。两者似乎都有效。可能会与stringr版本一起使用-我倾向于喜欢所有整洁的东西,我有一个很难理解的地方。*?一个东西怎么能匹配至少0次*最多一次?。我可以从测试中看出这是必要的,我只是感到困惑。就我个人而言,我可以更容易地理解这样的内容,例如“*\\D\\D+$”、“\\1”、df\u test$my_string@DanielO默认情况下,正则表达式是贪婪的..*?用于在匹配数字之前匹配尽可能少的字符。谢谢。两者似乎都有效。可能会与stringr版本一起使用-我倾向于喜欢所有整洁的东西,我有一个很难理解的地方。*?一个东西怎么能匹配至少0次*最多一次?。我可以从测试中看出这是必要的,我只是感到困惑。就我个人而言,我可以更容易地理解这样的内容,例如“*\\D\\D+$”、“\\1”、df\u test$my_string@DanielO默认情况下,正则表达式是贪婪的..*?用于在匹配数字之前匹配尽可能少的字符。
stringr::str_extract(df_test$my_string, '\\d+$')
regmatches(df_test$my_string, regexpr("\\d+$", df_test$my_string))
#[1] "0387"     "999999"   "12345432" "2345"     "1234"    
library(stringi)
stri_extract_last(df_test$my_string, regex = "\\d+")
#[1] "0387"     "999999"   "12345432" "2345"     "1234"