Ruby使用RegEx在字符串中查找完整的数学表达式

时间:2014-06-28 02:31:04

标签: 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* ))+/

1 个答案:

答案 0 :(得分:3)

正则表达式计算器

首先,您可能需要查看有关Regex Calculators(RPN和非RPN版本)的此问题。

但我们并没有处理括号,所以我们可以选择以下内容:

^\s*-?\d+(?:\s*[-+*/]\s*\d+)+$

请参阅demo

<强>解释

  • ^锚点断言我们位于字符串的开头
  • \s*允许使用可选空格
  • -?允许在第一个数字
  • 之前选择减号
  • \d+匹配第一个数字
  • 非捕获组(?:\s*[-+*/]\s*\d+)匹配可选空格,运算符,可选空格和数字
  • +量词匹配一次或多次
  • $锚点断言我们位于字符串的末尾