首页 > 解决方案 > 是否可以连续比较两个值并获取所需的值,但两个值都与写入的正则表达式匹配

问题描述

text = "团队祝您 4/20 快乐!13/10 恭喜..在这么多内容之后"

我只想获取评级为 13/10。我写了正则表达式

(\d+\.\d+|\d+)/(((?=10)10)|([1-9]\d+)) 

但它获取第一个(4/20)。这可以使用正则表达式来实现吗?

标签: regex

解决方案


在您的模式的这一部分中,您(?=10)10可以省略正向前瞻,因为这表示如果右边是 10,则匹配 10。这部分[1-9]\d+匹配 10 及以上,因此 10 已经在范围内。

您可以使用带有量词 {2}的捕获组来重复该组。

你的模式也可以写成\d+(?:\.\d+)?/[1-9]\d+)

要获得第二组,您可以使用:

^(?:.*?(\d+(?:\.\d+)?/[1-9]\d+)){2}
  • ^字符串的开始
  • (?:非捕获组
    • .*?匹配任何非贪婪的字符
    • (捕获组
      • \d+(?:\.\d+)?匹配 1+ 位数字,可选匹配点和 1+ 位数字
      • /匹配/
      • [1-9]\d+匹配 10 及以上
    • )关闭捕获组
  • ){2}关闭非捕获组并重复 2 次

正则表达式演示


推荐阅读