拆分包含数学方程的字符串

时间:2018-01-14 10:46:45

标签: ruby string

我想拆分包含等式的以下字符串:

sentence = "The integral of y^{n} is \frac{y^{n + 1}}{n + 1} when n \neq -1:"

预期结果是:

[y^{n}, \frac{y^{n + 1}}{n + 1}, n \neq -1:]

问题是hereMathjax自动连接删除空格的句子。

我可以使用以下方法删除字符串。

phrase = 'The integral of '
sentence.gsub(/#{phrase}/, '')
# => "y^{n} is \frac{y^{n + 1}}{n + 1} when n \neq -1:"

is = 'is'
sentence.gsub(/#{is}/, '')
# => y^{n}  \frac{y^{n + 1}}{n + 1} when n \neq -1:"

when_word = 'when'
sentence.gsub(/#{when_word}/, '')
# => "y^{n}  \frac{y^{n + 1}}{n + 1}  n \neq -1:"

我尝试了split,但没有得到预期的结果。

sentence.split(', ')
# => ["y^{n}  \frac{y^{n + 1}}{n + 1}  n \neq -1:"]

如何获得所需的结果?

3 个答案:

答案 0 :(得分:3)

根据我对你的问题的理解,这就是你想要的。

str = "The integral of y^{n} is \frac{y^{n + 1}}{n + 1} when n \neq -1:"
str.split(/\bThe integral of\b | \bis\b | \bwhen\b/)[1..-1]

#=> ["y^{n}", "\frac{y^{n + 1}}{n + 1}",  " n \neq -1:"]

答案 1 :(得分:2)

我认为这是最直接的。

string.match(/\AThe integral of (.*) is (.*) when (.*)\z/m).captures
#=> ["y^{n}", "\frac{y^{n + 1}}{n + 1}", "n \neq -1:"]

答案 2 :(得分:0)

由于反斜杠是公式的一部分,因此需要使用额外的反斜杠进行转义。 (如果从文件或其他来源读取字符串,而不是在源代码中指定它,则不需要这样做。)这是一个执行该操作然后进行解析的脚本。它并不像Anurag的解决方案那么优雅,但它确实起到了作用。

#!/usr/bin/env ruby

s = "The integral of y^{n} is \\frac{y^{n + 1}}{n + 1} when n \\neq -1:"

s = s.split(/ of /).last
frag1, rest = s.split(/ is /)
frag2, frag3 = rest.split(/ when /)
puts %Q{Fragment 1: "#{frag1}"}
puts %Q{Fragment 2: "#{frag2}"}
puts %Q{Fragment 3: "#{frag3}"}

=begin
Outputs:

Fragment 1: "y^{n}"
Fragment 2: "\frac{y^{n + 1}}{n + 1}"
Fragment 3: "n \neq -1:"

=end