如何使用正则移除字符串首尾非字母数字字符,仅保留字母数字与短横线
R 字符串首尾非字母数字字符清除方案
你可以在现有管道处理逻辑的末尾新增一条正则替换步骤,即可实现需求,完整处理代码如下:
string %>% gsub("[[:punct:]]", "-", .) %>% gsub(" ", "-", .) %>% gsub("\\-+", "-", .) %>% gsub("^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$", "", .)
正则规则说明
^[^a-zA-Z0-9]+:^匹配字符串开头位置,后面的规则匹配连续1个及以上的非字母、非数字字符|:正则或逻辑符,同时匹配前后两段规则[^a-zA-Z0-9]+$:$匹配字符串结尾位置,匹配结尾处连续1个及以上的非字母、非数字字符- 把匹配到的内容替换为空字符串,即可直接移除首尾不符合要求的字符
效果验证
用你给出的示例输入测试:
test_input <- c("-example-one111-", "-222example-two", "333example-333three333-")
运行上述代码后的输出和预期完全一致:
[1] "example-one111" "222example-two" "333example-333three333"
可选简化方案
你原有的标点、空格替换步骤可以合并为一步,简化后的完整代码如下:
string %>% # 同时替换所有标点和空格为短横线 gsub("[[:punct:]|[:space:]]", "-", .) %>% # 合并连续短横线 gsub("\\-+", "-", .) %>% # 移除首尾非字母数字字符 gsub("^[^a-zA-Z0-9]+|[^a-zA-Z0-9]+$", "", .)
内容的提问来源于stack exchange,提问作者WenliL
相关产品推荐
相关产品推荐

