我正在尝试在邮政编码的中间插入一个“+”符号。邮政编码遵循AA111AA
或AA11AA
的模式。我希望在最终数字之前插入“+”,因此输出AA11+1AA
或AA1+1AA
。我已经找到了使用stringr
执行此操作的方法,但感觉有一种更简单的方法来执行此操作,即我当前正在执行此操作。以下是我的代码。
pc <- "bt43xx"
pc <- str_c(
str_sub(pc, start = 1L, end = -4L),
"+",
str_sub(pc, start = -3L, end = -1L)
)
pc
[1] "bt4+3xx"
答案 0 :(得分:4)
以下是一些替代方案。如果//mNavigationView is your navigation view
mNavViewHeaderLayout = LayoutInflater.from(MainActivity.this).inflate(R.layout.header_navigation, mNavigationView);
//to access content in header view
mTextview = (TextView)mNavViewHeaderLayout.findViewById(R.id.textview);
是标量或向量,则所有解法都有效。不需要包裹。其中(3)似乎特别简短。
1)将所有内容(pc
)与最后一位数字(.*
)匹配,然后将其替换为第一次捕获(即与第一次捕获的部分匹配)第一组parens),加号和第二组捕获(即与最后一位数匹配)。
\\d
2)更短的替代方法是匹配一个数字后跟一个非数字,并将其替换为加号后跟匹配:
sub("(.*)(\\d)", "\\1+\\2", pc)
3)这个甚至比(2)短。它匹配替换匹配的最后3个字符,加上后跟匹配:
sub("(\\d\\D)", "+\\1", pc)
## [1] "bt4+3xx"
4)这个字符串将字符串拆分为单个字符,使用sub("(...)$", "+\\1", pc)
## [1] "bt4+3xx"
在适当的位置插入加号并将字符重新组合在一起。
append
如果已知sapply(Map(append, strsplit(pc, ""), after = nchar(pc) - 3, "+"), paste, collapse = "")
## [1] "bt4+3xx"
是标量(如问题中的情况),则可简化为:
pc
答案 1 :(得分:1)
这个带有sub
的正则表达式和两个后向引用应该有效。
sub("(\\d?)(\\d[^\\d]*)$", "\\1+\\2", pc)
[1] "bt4+3xx"
答案 2 :(得分:1)
sub('(\\d)(?=\\D+$)','+\\1',pc,perl=T)