【发布时间】:2014-06-28 02:31:04
【问题描述】:
我正在尝试编写一个程序,该程序将接收一个字符串并使用 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(string) 产生任何输出,或者可能是 nil 输出。此外,某些运算符之前需要一个 \。
使用括号的版本:
a = /\(* \s* \d+ \s* (( [-\+\*\/] \s* \d+ \)* \s* ) | ( [-\+\*\/] \s* \(* \s* \d+ \s* ))+/
【问题讨论】:
-
请阐明您所说的数学表达式是什么意思。例如,它是否可以包含
^之类的符号、希腊字母、log之类的单词等。坦率地说,我怀疑您能否将其变成一个明确的问题。 -
@Fabric,我认为这是一个不同的问题。它会处理像
"/**123**/"这样的字符串,但这不是数学表达式。 -
如果你不关心括号:
-?\d+(\s?[\+\-\*\/]\s?-?\d)+demo -
非常抱歉没有说出什么样的数学方程。我更担心我的语法!我担心的唯一运算符是“+”、“/”、“*”和“-”,以及数字和括号。我的主要疏忽!
-
Delliardo,你被原谅了,但就这一次 :-) 然而,你与@zx81 的心灵融合似乎奏效了。我很高兴你得到了你想要的答案。进行编辑以澄清您的问题还为时不晚。许多其他人将来可能会读到这篇文章,他们会很感激的。