在数字和特殊字符条件之间加一个白色-space R

Add a white-space between number and special character condition R

我正在尝试使用 stringr 或 R 碱基调用来有条件地为大向量中的实例添加一个 white-space,其中有一个数值然后一个特殊字符 - 在本例中是一个没有 space 的 $ 符号。 str_pad 似乎不允许参考向量。

例如,对于:

.88.34

我想在最后一个数字之后和下一个美元符号之前添加一个白色space:

.88 .34

谢谢!

如果您使用矢量字符串,这将起作用:

mystring<-as.vector('.88.34 .34.31')

gsub("(?<=\d)\$", " $", mystring, perl=T)

[1] ".88 .34 .34 .31"

这也包括已经 space 的情况。

关于评论中提出的问题:

mystring2<-as.vector('Regular_Distribution_Type† Income Only" "Distribution_Rate 5.34%" "Distribution_Amount [=11=].0295" "Distribution_Frequency Monthly')

gsub("(?<=[[:alpha:]])\s(?=[[:alpha:]]+)", "_", mystring2, perl=T)

[1] "Regular_Distribution_Type<U+2020> Income_Only\" \"Distribution_Rate 5.34%\" \"Distribution_Amount [=11=].0295\" \"Distribution_Frequency_Monthly"

请注意,\ 由于向量中的嵌套引号而出现,应该没有什么区别。由于对特殊字符进行编码,还会出现 <U+2020>

正则表达式解释:

(?<=[[:alpha:]]) 这第一部分是由 ?<= 创建的正向后视,这基本上是在我们试图匹配的任何事物的后视,以确保我们在后视中定义的内容存在。在这种情况下,我们正在寻找匹配字母字符的 [[:alpha:]]

然后我们用 \s 检查空白 space,在 R 中我们必须使用双重转义,所以 \s,这就是我们要匹配的内容。

最后我们使用 (?=[[:alpha:]]+),这是由 ?= 定义的正向预测,检查以确保我们的匹配后跟另一个字母,如上所述。

的逻辑是找一个字母之间的空格space,匹配space,然后用gsub替换,加上_

查看所有正则表达式here

如果只有一个实例,则使用sub分别捕获数字和$,并在替换中在捕获组的反向引用之间添加space

sub("([0-9])([$])", "\1 \2", v1)
#[1] ".88 .34"

或使用正则表达式环顾四周

gsub("(?<=[0-9])(?=[$])", " ", v1, perl = TRUE)

数据

v1 <- ".88.34"