我无法访问代码,这是通过一个界面,只允许我编辑解析用户响应的正则表达式。我需要在用户文本之后提取权重,在那里他们发送文字:
wt 172.5
172.5 lbs
180
wt. 173.22
172,5
我需要将权重捕获为浮点字段,但我想将其限制为最多1个小数位。我尝试使用/(?<val>[\d+((\.|,)\d\d?)?]/
,但它只保存字段中的第一个数字“1”
答案 0 :(得分:2)
有时似乎最简单的事情并非如此。我建议使用这个正则表达式:
r = /(?<=\A|\s)\d+(?:[.,]\d)?(?=\d|\s|\z)/
我们可以使用扩展或自由间距模式定义正则表达式(通过在最终x
之后添加修饰符/
),这允许我们包括文档:
r = /
(?<=\A|\s) # match beginning of string or space in a positive lookbehind
\d+ # match one or more digits
(?:[.,]\d)? # optionally (? after non-capture group) match a . or , then a digit
(?=\d|\s|\z) # match a digit, space or the end of the string in a positive lookahead
/x
"wt 172.5"[r] #=> "172.5"
"172.5 lbs"[r] #=> "172.5"
"180"[r] #=> "180"
"wt. 173.22"[r] #=> "173.2"
"172,5"[r] #=> "172,5"
"A1 143.66"[r] #=> "143.6"
"A1 1.3.4 43.6"[r] #=> "43.6"
答案 1 :(得分:0)
\d+(?:[,.]\d{1,2})?
猜猜你想要这个。[]
是字符类,而不是你的想法。你的字符类只捕获你定义的所有字符中的一个。
参见演示。