正则表达式从字符串中获取两个值

时间:2016-08-25 12:49:47

标签: regex

我有下面的字符串,我需要拉出两个值(数值)一个是197kJ(数字197),第二个是47kcal(数字47)。有人可以帮助我,因为我只是疯了:)?

我的regular expression

((<|>)?\d+((\.|,)\d+)?kj\s?\/\s?)?(<|>)?(\d+((\.|,)\d+)?)kcal

要搜索的字符串:

  

每250毫升份量(每包10份):能量197kJ(2%ADH)/ 47kcal   (2%ADH),脂肪0.3g(其中饱和脂肪0.1g),碳水化合物7.8g   (3%ADH)(其中糖3.9g(4%ADH)),纤维1.6g,蛋白质2.2g   (4%ADH),盐1.6g(27%ADH)

4 个答案:

答案 0 :(得分:1)

只是做:

\d+(?:kcal|kJ)
# require at least one number
# followed by either kcal or kJ

请参阅a demo on regex101.com(或您的https://regex101.com/r/uS3mE4/3

答案 1 :(得分:1)

你的正则表达式看起来过于复杂。可能是因为它提供了比描述更复杂的工作。

但你的taks(获得kJ和kcal的数值)可以使用如下模式来完成:

(\d+[.,]?\d+)(?:kJ|kcal)

答案 2 :(得分:0)

这是我的主张:

(\d+)kJ.*?(\d+)kcal
  1. 它在两个不同的捕获中提取kJ和kcal数 小组
  2. 它只是捕获“kJ”或“kcal”之前的所有数字字符 子
  3. 它使用延迟量词*?来避免消耗第一个 大卡号的字符。
  4. https://regex101.com/r/uS3mE4/4

答案 3 :(得分:0)

您可以在数字和测量单位之间使用交替和可选(0或更多)空格:

[<>]?(\d+(?:[.,]\d+)?)\s*k(?:cal|j)

i不区分大小写的修饰符一起使用。

请参阅regex demo

<强>详情:

  • [<>]? - 可选的<>
  • (\d+(?:[.,]\d+)?) - 第1组捕获1个或多个数字,然后是可选序列:.,和1+位数
  • \s* - 零个或多个空格
  • k - 文字k
  • (?:cal|j) - calj