在数字和特殊字符条件之间加一个白色-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"
我正在尝试使用 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"