gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:07:20 25 4
gpt4 key购买 nike

寻找与 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com