regex 删除数据框中行中的特殊字符

lh80um4z  于 2023-03-24  发布在  其他
关注(0)|答案(2)|浏览(111)

我有一个名为indicator的 Dataframe ,在实际观察(内容)之前有数字和字母混合,即在下面的DF中,混合的字母和数字是

6.2-, S1.1, S3.1- & I1.1

实际DF

indicator <- c("6.2- Total number customers per month (average)","S1.1 Total of unique users served per month", "S3.1- Volume of merchandise sold per month", 
               "I1.1 Quantity of bags received per month.")
amount <- c(12, 45, 44, 67)

DF <- data.frame(indicator, amount)

> DF
                                        indicator amount
1 6.2- Total number customers per month (average)     12
2     S1.1 Total of unique users served per month     45
3      S3.1- Volume of merchandise sold per month     44
4       I1.1 Quantity of bags received per month.     67

如何使用stringrregex删除混合的数字和字母?

krcsximq

krcsximq1#

你可以使用sub()如下:

DF$indicator <- sub("^[A-Z]*\\d(?:\\.\\d+)*-?\\s+", "", DF$indicator)
DF

                                   indicator amount
1 Total number customers per month (average)     12
2     Total of unique users served per month     45
3       Volume of merchandise sold per month     44
4       Quantity of bags received per month.     67

下面是对所使用的正则表达式模式的解释:

  • ^从指示器的开始
  • [A-Z]*匹配零个或多个前导大写字母
  • \d匹配数字
  • (?:\.\d+)*后跟点和数字,零次或多次
  • -?匹配可选的结束破折号
  • \s+匹配一个或多个空格字符
r6hnlfcb

r6hnlfcb2#

假设指示符始终位于开头,后面跟一白色,您可以这样做来删除从开头到第一个空格的所有内容。

library(stringr)
library(magrittr)

DF$indicator <- DF$indicator  %>% str_remove_all("^.*? ")
> DF
                                   indicator amount
1 Total number customers per month (average)     12
2     Total of unique users served per month     45
3       Volume of merchandise sold per month     44
4       Quantity of bags received per month.     67
  • ^锚定到字符串的开头
  • .*匹配所有内容(直到白色)
  • ?在第一白色而不是最后一个空格处停止正则表达式

相关问题