我有下面的字符串,我需要拉出两个值(数值)一个是197kJ(数字197),第二个是47kcal(数字47)。有人可以帮助我,因为我只是疯了:)?
((<|>)?\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)
答案 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
*?
来避免消耗第一个
大卡号的字符。答案 3 :(得分:0)
您可以在数字和测量单位之间使用交替和可选(0或更多)空格:
[<>]?(\d+(?:[.,]\d+)?)\s*k(?:cal|j)
与i
不区分大小写的修饰符一起使用。
请参阅regex demo。
<强>详情:
[<>]?
- 可选的<
或>
(\d+(?:[.,]\d+)?)
- 第1组捕获1个或多个数字,然后是可选序列:.
或,
和1+位数\s*
- 零个或多个空格k
- 文字k
(?:cal|j)
- cal
或j
。