gpt4 book ai didi

ruby - 修复正则表达式以提取特定的数字格式

转载 作者:太空宇宙 更新时间:2023-11-03 16:18:00 26 4
gpt4 key购买 nike

理想情况下,我的正则表达式应捕获/提取以下所有数字格式:

500/500.55/500k/500.55k/500 至 600/500k 至 600k/500 至 600k/500.55 至 600.55/500.55 至 600.55 k

我当前的正则表达式有问题,因为如果文本中有像“700,000”或“800,000”或“8.54”这样的数字,那么它会拆分数字并捕获:

700,000 => "700","000"
800,000. => "800" , "000." , "8.", "54"
8.54 => "8.", "54"

有什么改变的想法吗?当前正则表达式:

(\d+(?:\.?\d*)?\s*k?(?:\-|to)\s*\d+(?:\.?\d*)\s*k?|\d+(?:\.?\d*)\s*k?)

最佳答案

我建议使用更多的可选组而不是连续的可选原子,并使用 [,.] 字符类而不是 \. 以允许 2 个分隔符,并且 \p{Pd} 匹配任何破折号:

/\d+(?:[.,]\d+)*(?:\s*k)?(?:\s*(?:\p{Pd}|to)\s*\d+(?:[.,]\d+‌​)*(?:\s*k)?)?/i

参见 Rubular demo

如果你想让它更精确,(?:[.,]\d+)* 应该拆分成 (?:\.\d+)*(?:\.\d+)?

/\d+(?:\.\d+)*(?:\.\d+)?(?:\s*k)?(?:\s*(?:\p{Pd}|to)\s*\d+(?:\.\d+)*(?:\.\d+)?(?:\s*k)?)?/i

详细信息:

  • \d+ - 一位或多位数字
  • (?:[.,]\d+)* - . 的 0+ 序列, 后有 1 个或多个数字
  • (?:\s*k)? - 0+ 空格 + k/K
  • 的可选序列
  • (?:\s*(?:\p{Pd}|to)\s*\d+(?:[.,]\d+‌ )?(?:\s*k) ?)? - 一个可选序列:
    • \s*(?:\p{Pd}|to)\s* - 任何破折号 (\p{Pd}) 或 to 包含 0+ 个空格
    • \d+(?:[.,]\d+‌ )*(?:\s*k)? - 见上文。

关于ruby - 修复正则表达式以提取特定的数字格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39527323/

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