正则表达式用于匹配带有可选十进制数字的数字

时间:2019-12-05 08:19:32

标签: regex

我正在尝试使用正则表达式从一条推文中提取评级。例如下面的tweet,我想获得用户评分(9.75)和最高评分(10)。

This is Logan, the Chow who lived. He solemnly swears he's up to lots of good. 9.75/10

我在正则表达式下使用过,但是捕获组1和2的结果分别为75和10。我不确定为什么仅在十进制组之后捕获用户等级。

.*(\d+\.?\d+)\/(\d*\.?\d*)

2 个答案:

答案 0 :(得分:2)

如果您希望两个数字都具有可选的小数,则应将匹配的一个或矿石+和匹配的零个或多个*放在正确的位置,在该位置它们与强制性的前导数字匹配,可选的小数点

(\d+\.?\d+)\/(\d*\.?\d*)

使用

(\d+\.?\d*)\/(\d+\.?\d*)

这将匹配至少一个数字,然后匹配一个点,然后再匹配另一个数字。

实时链接:https://regex101.com/r/qc5Zwz/1

答案 1 :(得分:2)

\b(\d+(?:\.\d+)?)\/(\d+)\b
  • \b-期望单词边界(例如空格,非字母字符)
  • (-开始捕获“评分”
  • \d+-整数部分
  • (?:\.\d+)?-将小数部分包装起来,不要将其捕获为一组;使其可选
  • )-“评分”捕获组的结尾
  • \/-期望正斜杠
  • (\d+)-捕获“最大值”
  • \b-再次期望单词边界

const text = 'This is Logan, the Chow who lived. He solemnly swears he\'s up to lots of good. 9.75/10'
const pattern = /\b(\d+(?:\.\d+)?)\/(\d+)\b/
console.log(text.match(pattern))

https://regex101.com/r/foO1DF/2