我目前有一个城市数据框/向量,其末尾有以以下任意内容开头的单词:Util、Municipal、Police、Water 或末尾有 #。
如何前往:
科尔 |
---|
假市政法院之城 |
假装水务之城 |
非真正警察局之城 |
欺诈山公用事业 |
El Imagined 第 344 区法院 |
对此:
科尔 |
---|
德克萨斯州假城市法院 |
德克萨斯州假装市自来水公司 |
非真实市,德克萨斯州警察局 |
弗劳德山,德克萨斯州公用事业公司 |
El Imagined,德克萨斯州第 344 号地方法院 |
我当前的代码是:
DATA %>%
mutate(col = str_replace(col, "(?i)(?>=(UTIL | MUNICIPAL | Police | Water | ^([0-9]+)")),?\\s", ", TX"))
我认为每个关键字都正确包含在这个表达式中。我绝对不确定的是我是否弄错了数字。
你可以使用
x <- c("City of Fake Municipal Court", "City of Pretend Water Utility","City of Not Real Police Department","Fraud Hill Utility","El Imagined 344th District Court")
regex <- "(?i)\\s*\\b(util(?:it(?:y|ies))?|MUNICIPAL|Police|Water|[0-9]+(?:st|[rn]d|th)?)(?:,?\\s)?"
trimws(sub(regex, ", TX ", x, perl=TRUE))
sub
只会替换第一次出现的情况,并且 PCRE 模式需要 perl=TRUE
才能与 sub
配合使用。
图案详情:
(?i)
- 模式不区分大小写\s*
- 零个或多个空格\b
- 单词边界(util(?:it(?:y|ies))?|MUNICIPAL|Police|Water|[0-9]+(?:st|[rn]d|th)?)
- 第 1 组:util
后跟一个可选的 it
,后跟 y
或 ies
,或 MUNICIPAL
,或 Police
,或 Water
,或一个或更多数字,可选后跟 st
、r
或 n
,然后是 d
或 th
(?:,?\s)?
- 可选的非捕获组,匹配出现一次或零次的可选逗号,然后是空格字符。