ruby - 正则表达式去除除序数以外的所有数字

标签 ruby regex

寻找与 Ruby 中的#gsub 一起使用的正则表达式,以去除字符串中除序数之外的所有数字。假设以下内容可以在字符串中保留我想要的内容:

string = "100 red balloons"
strip_digits = string.gsub(/[^a-zA-Z\s]/, '')
=> " red balloons"

如果满足以下条件,我将如何修改 strip_digits 中的正则表达式:

string = "50th red balloon"

strip_digits 会返回:

=> "50th red balloon"

也就是说,正则表达式会忽略属于序数的数字,同时匹配其他数字。

对于此示例,可以安全地假设紧跟序数指示符(“nd”、“th”、“rd”或“st”)的任何数字串是序数.

最佳答案

作为正则表达式的“修复”,我建议:

input.gsub(/(\d+(?:th|[rn]d|st))|[^a-z\s]/i, "\\1")

参见 IDEONE demo here

逻辑是这样的:将序数后缀的所有数字匹配捕获到第1组,然后用替换模式中的\1反向引用恢复这个值,再匹配(删除)所有带有[^a-z\s](或[^\p{L}\s])的非字母和非空格。

图案细节:

  • (\d+(?:th|[rn]d|st)) - 第 1 组匹配 1+ 个数字 (\d+) 后跟 thrdndst(所有子字符串都存储在编号缓冲区 #1 中,当 \1 反向引用用于替换模式)
  • | - 或
  • [^a-z\s] - ASCII 字母以外的字符(由于 /i 不区分大小写修饰符,所有小写和大写字母都匹配)和空格(为避免删除 Unicode 字母,请使用 \p{L} 而不是 a-z)。

关于ruby - 正则表达式去除除序数以外的所有数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37104666/

相关文章:

python - 用于删除 XML 注释和 HTML 元素的 Python 中的正则表达式

JavaScript/RegExp 替换部分字符串

ruby-on-rails - 如何在 Rails Controller 上呈现两个 json 对象作为响应

ruby-on-rails - 如何干净地删除 rubinius?

ruby - 将字符串插入数组中的数组会产生意外结果

python - 正则表达式匹配每三位数字以逗号分隔的数字

C# 正则表达式,检索由逗号、括号运算符分隔的两个单词

java - 具有不区分大小写前缀的正则表达式

ruby-on-rails - 如何通过 C 程序的命令行界面编译 C 程序以与我的 ruby​​ gem 一起使用?

ruby-on-rails - Ruby on Rails 3 - 公共(public)实时聊天