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

标签 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(string) 产生任何输出,或者可能是 nil 输出。此外,某些运算符之前需要一个\。

使用括号的版本:

a = /\(* \s* \d+ \s* (( [-\+\*\/] \s* \d+ \)* \s* ) | ( [-\+\*\/] \s* \(* \s* \d+ \s* ))+/

最佳答案

正则表达式计算器

首先,您可能想看看这个关于 Regex Calculators 的问题(RPN 和非 RPN 版本)。

但是我们不处理括号,所以我们可以使用类似的东西:

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

参见 demo .

解释

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

关于Ruby 使用 RegEx 在字符串中查找整个数学表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24463048/

相关文章:

python - 如何使用正则表达式 sub 到字符串列表中的不同项目?

regex - 如何在URL的isDefined()或structKeyExists()中使用通配符?

java - 正则表达式匹配多行或其他解决方案?

ruby - 使用 Ruby,我如何获取字符串并在单词之间插入竖线?

ruby - 新的 RubyMotion 和 Joybox 的问题

ruby - 如何更改数组的一些随机元素

Python 正则表达式屏蔽字符串中的键值对

ruby - 如何对 ruby​​ 中的重音单词数组进行排序

ruby-on-rails - 如何删除并重新安装 rails 3.2.13

html - 使用一对 P​​erl 正则表达式匹配的无限循环