Ruby使用RegEx 在字符串中查找完整的数学表达式
我正在尝试编写一个程序,它将接受一个字符串并使用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* ))+/
正则表达式计算器
首先,您可能想看看有关正则表达式计算器 (RPN和非RPN版本)的这个问题。
但是我们没有处理括号,所以我们可以使用类似的东西:
^\s*-?\d+(?:\s*[-+*/]\s*\d+)+$
见演示 。
说明
-
^
anchor断言我们在字符串的开头 -
\s*
允许可选空格 -
-?
允许在第一个数字之前选择减号 -
\d+
匹配第一个数字 - 非捕获组
(?:\s*[-+*/]\s*\d+)
匹配可选空格,运算符,可选空格和数字 -
+
量词匹配一次或多次 -
$
anchor断言我们在字符串的末尾