Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/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_Regex_Nsregularexpression - Fatal编程技术网

如何使用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