Regex 删除字符串中第一个逗号之前的句点
如何删除这些字符串中第一个逗号之前的句点Regex 删除字符串中第一个逗号之前的句点,regex,r,gsub,Regex,R,Gsub,如何删除这些字符串中第一个逗号之前的句点 xx <- c("fefe.3. fregg, ff, 34.gr. trgw", "fefe3. fregg, ff, 34.gr. trgw", "fefe3 fregg, ff, 34.gr. tr.gw") 我从gsub(“\\.”,“,”,xx))开始,它删除了所有句点。如何将其更改为“仅指定第一个逗号前的句点”?尝试以下操作: gsub("\\.(.*,.*)","\\1", xx) [1]
xx <- c("fefe.3. fregg, ff, 34.gr. trgw",
"fefe3. fregg, ff, 34.gr. trgw",
"fefe3 fregg, ff, 34.gr. tr.gw")
我从gsub(“\\.”,“,”,xx))
开始,它删除了所有句点。如何将其更改为“仅指定第一个逗号前的句点”?尝试以下操作:
gsub("\\.(.*,.*)","\\1", xx)
[1] "fefe3 fregg, ff, 34.gr. trgw"
[2] "fefe3 fregg, ff, 34.gr. trgw"
[3] "fefe3 fregg, ff, 34.gr. tr.gw"
正则表达式的工作原理如下:
查找句点\\。
在其他文本中查找逗号,并将其分组(.*,.*)
指第一组\\1
xx <- c("fefe.3. fregg, ff, 34.gr. trgw",
"fefe3. fregg, ff, 34.gr. trgw",
"fefe3 fregg, ff, 34.gr. tr.gw")
temp <- strsplit(xx, ",")
sapply(seq_along(temp), function(x) {
t1 <- gsub("\\.", "", temp[[x]][1])
paste(t1, temp[[x]][2], temp[[x]][-c(1, 2)], sep = ",")
})
# [1] "fefe3 fregg, ff, 34.gr. trgw" "fefe3 fregg, ff, 34.gr. trgw"
# [3] "fefe3 fregg, ff, 34.gr. tr.gw"
xx这使用中的gsubfn
提取从字符串开头开始且不包含逗号的最长子字符串。(如果没有逗号,这将是整个字符串)。然后,它使用gsub
删除其中的句点。(如果希望仅删除子字符串中的第一个周期,则将gsub
更改为sub
)
结果是:
[1] "fefe3 fregg, ff, 34.gr. trgw"
[2] "fefe3 fregg, ff, 34.gr. trgw"
[3] "fefe3 fregg, ff, 34.gr. tr.gw"
我不知道打字的速度和数量,但这里有一种使用qdap的beg2char
和char2end
函数的方法:
## xx <- c("fefe.3. fregg, ff, 34.gr. trgw",
## "fefe3. fregg, ff, 34.gr. trgw",
## "fefe3 fregg, ff, 34.gr. tr.gw")
library(qdap)
paste0(gsub("\\.", "", beg2char(xx, ",")), char2end(xx, ",", include=TRUE))
## > paste0(gsub("\\.", "", beg2char(xx, ",")), char2end(xx, ",", include=TRUE))
## [1] "fefe3 fregg, ff, 34.gr. trgw" "fefe3 fregg, ff, 34.gr. trgw"
## [3] "fefe3 fregg, ff, 34.gr. tr.gw"
#xx粘贴0(gsub(“\\.”,“”,beg2char(xx,“”),char2end(xx,“,”,include=TRUE))
##[1]“fefe3-fregg,ff,34.gr.trgw”“fefe3-fregg,ff,34.gr.trgw”
##[3]“三价铁弗雷格,ff,34.gr.tr.gw”
谢谢您提供的详细信息,非常感谢。用你的行,我在第一项中仍然有一个句号:“fefefe3.fregg,ff,34.gr.trgw”
(当示例数据有点不同时,你可能已经得到了我的Q的早期编辑,很抱歉混淆!)@Ben你可以将Andrie的gsub
嵌套在这里,也可以得到你的答案:gsub(\\.(.*),“\\1”,gsub(\.(.*),“\\1”,xx)
。这取决于你是否知道在第一个逗号之前可以使用多少个句点,或者你编写递归函数的技能……@AnandaMahto,谢谢,我不知道应该使用多少个句点,我还没有编写递归函数……非常感谢!这在我的实际用例中也起到了作用。我认为也许有一个字符更少的解决方案(我是一个懒惰的打字员),但这让我走上了正轨,这才是这个案子中最重要的。再次感谢!@Ben,我肯定有,但有时对正则表达式想得太多会让我大脑冻结。:)嘿!我完全明白你的意思。我是一个完全的正则表达式白痴。谢谢,那gsubfn
很有趣!谢谢你,这个解决方案绝对是最好的对我来说最容易理解。
[1] "fefe3 fregg, ff, 34.gr. trgw"
[2] "fefe3 fregg, ff, 34.gr. trgw"
[3] "fefe3 fregg, ff, 34.gr. tr.gw"
## xx <- c("fefe.3. fregg, ff, 34.gr. trgw",
## "fefe3. fregg, ff, 34.gr. trgw",
## "fefe3 fregg, ff, 34.gr. tr.gw")
library(qdap)
paste0(gsub("\\.", "", beg2char(xx, ",")), char2end(xx, ",", include=TRUE))
## > paste0(gsub("\\.", "", beg2char(xx, ",")), char2end(xx, ",", include=TRUE))
## [1] "fefe3 fregg, ff, 34.gr. trgw" "fefe3 fregg, ff, 34.gr. trgw"
## [3] "fefe3 fregg, ff, 34.gr. tr.gw"