我试图编写一个程序,它将接受一个字符串并使用RegEx搜索某些数学表达式,例如1 * 3 + 4/2。只有运算符才能查找[ - * + / ]
到目前为止:
string = "something something nothing 1/ 2 * 3 nothing hello world"
a = /\d+\s*[\+ \* \/ -]\s*\d+/
puts a.match(string)
产生
1/ 2
我想抓住整个等式1/2 * 3.我基本上是全新的正则表达式世界,所以任何帮助都将受到赞赏!
新信息:
a = /\s*-?\d+(?:\s*[-\+\*\/]\s*\d+)+/
感谢zx81的回答。我必须修改它才能工作。出于某种原因,^和$不会为a.match(字符串)生成任何输出,或者可能是nil输出。此外,某些运营商在他们之前需要一个\。
使用括号的版本:
a = /\(* \s* \d+ \s* (( [-\+\*\/] \s* \d+ \)* \s* ) | ( [-\+\*\/] \s* \(* \s* \d+ \s* ))+/
答案 0 :(得分:3)
正则表达式计算器
首先,您可能需要查看有关Regex Calculators(RPN和非RPN版本)的此问题。
但我们并没有处理括号,所以我们可以选择以下内容:
^\s*-?\d+(?:\s*[-+*/]\s*\d+)+$
请参阅demo。
<强>解释强>
^
锚点断言我们位于字符串的开头\s*
允许使用可选空格-?
允许在第一个数字\d+
匹配第一个数字(?:\s*[-+*/]\s*\d+)
匹配可选空格,运算符,可选空格和数字+
量词匹配一次或多次$
锚点断言我们位于字符串的末尾