如何将包含数字(未知位数)的字符串拆分为两个字符串 - 数字和字符串的其余部分。请注意,字符串中可能存在其他不应受影响的数字。例如:
"abc665abc12" -> "abc665abc", "12"
"abc665abc 182" -> "abc665abc", "182"
"abc665abc0" -> "abc665abc", "0"
谢谢!
答案 0 :(得分:8)
您也可以使用strsplit
> x = c("abc665abc12", "abc665abc 182", "abc665abc0")
> strsplit(x, "(?<=[A-Za-z])\\s*(?=\\d+$)", perl = TRUE)
[[1]]
[1] "abc665abc" "12"
[[2]]
[1] "abc665abc" "182"
[[3]]
[1] "abc665abc" "0"
答案 1 :(得分:5)
这有效:
# op's example
x = c("abc665abc12", "abc665abc 182", "abc665abc0")
library(stringi)
res = stri_match_first_regex(x, "^(.*?) ?([0-9]+)$")
[,1] [,2] [,3]
[1,] "abc665abc12" "abc665abc" "12"
[2,] "abc665abc 182" "abc665abc" "182"
[3,] "abc665abc0" "abc665abc" "0"
您想要的部分位于第2列和第2列中。 3,对应于正则表达式中的括号。
答案 2 :(得分:3)
说到这样的话,我喜欢使用gsubfn包中的function setMargin() {
cWidth = $('#container').width();
iWidth = $('.items').width();
totalItems = $('.items').length;
itemsPerRow = parseInt(cWidth / iWidth);
if(totalItems < itemsPerRow) {
space = cWidth - iWidth * totalItems;
margin = space/(totalItems+1);
} else {
space = cWidth - iWidth * itemsPerRow;
margin = space/(itemsPerRow+1);
}
$(".items").css("margin-left", margin+"px");
}
:
strapply
如果你有一个角色向量,那就是相同的概念:
library(gsubfn)
strapply('abc665abc12', '(.*?) *(\\d+)$', c)[[1]]
# [1] "abc665abc" "12"
答案 3 :(得分:2)
在基地:
cbind(x,
gsub("[ 0-9]+$", "", x),
gsub("^[a-z 0-9]+[a-z ]+", "", x))
x
[1,] "abc665abc12" "abc665abc" "12"
[2,] "abc665abc 182" "abc665abc" "182"
[3,] "abc665abc0" "abc665abc" "0"
答案 4 :(得分:0)
使用好的旧正则表达式解决方案:使用两个角色向量
x <-"abc665abc12"
y <- "abc665abc 182"
patterns<-"[[:digit:]]+$"
m1 <- regexpr(patterns,x)
m2 <-regexpr(patterns,y)
现在regmatches(x,m1)
收益&#34; 12&#34; n regmatches(y,m1)
收益&#34; 182&#34;