提问人:DHoog 提问时间:8/23/2022 最后编辑:Gregor ThomasDHoog 更新时间:8/23/2022 访问量:18
有没有办法删除标点符号,除非在某些字符前面?
Is there a way to delete punctuation except when preceding certain characters?
问:
更具体地说,我想删除字符串列中的所有句点,除非前面有数字。我已经尝试过遍历每个字符串,但由于需要将其包含在函数中,这很复杂。我现在拥有的是来自 stringr 的“环顾四周”的“不前面”,但它抛出“无效正则表达式”错误:
df <- data.frame(c("2.3 to 11.1 on N. Side Ave.", "MP 1.25-4.00 Main St."),
c("12-34", "23-45"))
colnames(df) <- c("ADDR", "NUM")
f.Addr <- function(ADDRESS, NUMBER) {
ADDRESS <- gsub("(?<![:digit:])[.]", " ", ADDRESS)
df <- data.frame(NUMBER, ADDRESS)}
df <- f.Addr(df$ADDR, df$NUM)
df
期望输出: ADDR NUM 1 2.3 至 11.1 在 N Side Ave 12-34 2 MP 1.25-4.00 主街 23-45
在 Python 中,我想我可以使用类似“[^0:9][.]”的东西来匹配。也许对 R 使用括号?
谢谢
担
答: 暂无答案
评论
gsub("(?<!\\d)[.]", " ", ADDRESS, perl=TRUE)
gsub("(\\D)\\.", "\\1", df$ADDR)
可以用作 python 和 R 中 this 的否定是相同的。\\D
\\d
gsub("(?<=\\D)[.]", "", ADDRESS, perl = TRUE)
也会起作用