You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用正则移除字符串首尾非字母数字字符,仅保留字母数字与短横线

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:12:03