如何使用R中的正则表达式从字符串中提取所有三(五)位数字?
我是正则表达式新手,所以我请求您的帮助 我有一个字符串值,比如说,如何使用R中的正则表达式从字符串中提取所有三(五)位数字?,r,regex,nsregularexpression,R,Regex,Nsregularexpression,我是正则表达式新手,所以我请求您的帮助 我有一个字符串值,比如说,102-105+106-10605-10605-10610-10610+10613。如何轻松提取三位数的所有值,五位数的所有值。另一项任务是考虑值之前的+或-符号。例如,提取前面有符号-的5位数字的所有值 我知道R中有一些包可以让您做到这一点。但我不知道该怎么做。我尝试了各种代码,但不幸的是每次都失败了 UPD: 从我提到的向量中,我想提取三位数的所有值,只有五位数 我用了密码 str_extract_all(d, ("\\d{3
102-105+106-10605-10605-10610-10610+10613
。如何轻松提取三位数的所有值,五位数的所有值。另一项任务是考虑值之前的+或-
符号。例如,提取前面有符号-
的5位数字的所有值
我知道R中有一些包可以让您做到这一点。但我不知道该怎么做。我尝试了各种代码,但不幸的是每次都失败了
UPD:
从我提到的向量中,我想提取三位数的所有值,只有五位数
我用了密码
str_extract_all(d, ("\\d{3}"))
它给了我
[1] "102" "105" "106" "106" "106" "106" "106" "106" "106" "106".
[1] "10605" "10605" "10610" "10610" "10613" "10613" "10620".
但是我想要以下结果“102”“105”“106”
。i、 e.代码不应考虑5位数字的值,并从中提取一行中的任何三位数字
如果是5位查询str\u extract\u all(d,(“\\d{5}”)
它会给我
[1] "102" "105" "106" "106" "106" "106" "106" "106" "106" "106".
[1] "10605" "10605" "10610" "10610" "10613" "10613" "10620".
这个结果是正确的
我希望我的解释正确。
vect你可以这样做
vect <- "102-105+106-10605-10605 -10610-10610+10613"
#Extract 3 digits
str_extract_all(vect, pattern = "[:digit:]{3}")
[[1]]
[1] "102" "105" "106" "106" "106" "106" "106" "106"
#Extract 5 digits
str_extract_all(vect, pattern = "[:digit:]{5}")
[[1]]
[1] "10605" "10605" "10610" "10610" "10613"
#Extract 5 digits with minus sign ahead of it
str_extract_all(vect, pattern = "-[:digit:]{5}")
[[1]]
[1] "-10605" "-10605" "-10610" "-10610"
library(stringr)
d<-"102-105+106-10605-10605 -10610-10610+10613"
str_match_all(d, "\\b([\\+\\-]*\\d{3})\\b")[[1]][,2]
[1] "102" "-105" "+106"
str_match_all(d, "\\b([\\+\\-]*\\d{5})\\b")[[1]][,2]
[1] "-10605" "-10605" "10610" "-10610" "+10613"
库(stringr)
请看一下stringr
包,尤其是str\u extract\u all
Yep。我使用了str\u extract\u all
函数。但它给了我所有的数字。例如,str\u extract\u all(d,(“\\d{3}”)
给出每个值的前三位数字。但如果值超过3位,我需要对其进行转义。到目前为止,您尝试了什么?@camille请参阅上面的评论。如果您希望问题包含所有相关代码,即使代码不起作用,也会很有帮助。使帮助未来有类似问题的用户变得更容易,并使其受益。也不清楚你想要什么样的输出来感谢你。但如果值的位数超过3位(如果是3位),则需要对其进行转义,并对所有少于或多于5位的值进行转义。也就是说,作为三位数查询的结果,我希望得到“102”“105”“106”。如果有5个数字“10605”、“10605”、“10610”等,我想它必须像上面的编辑一样分裂,否则它总是会考虑5位数的第一个三或最后三个,幸运的是,它给了我一点结果,然后我想要。这是因为我提供的示例并不完美。我再试一次。假设我们有下一个向量102-105+106-10705-10805-10910-11010+11113
。作为3位数请求的结果,它应该只列出我102、105、106
。但是如果我们在向量上运行你的代码,你的代码也提供了107
,这不是我想要的。我希望我描述得很好。它不能提供107。vect3