正则表达式在数学表达式中将1x重写为x

时间:2013-07-22 19:45:34

标签: regex math text

我的文字可以包含数学表达式,其中1x可以出现,或者更一般,1然后是字母。我要做的是用正则表达式重写文本中的数学,以便所有出现的1x都被x替换,但不是那样的。 21倍变为2倍。此外,文本中的数学在#delimiters中,1x只应在分隔符之间替换。

示例文本是:

“作为第一步,您可以重写#21x * x - 1y#等于#1z + 1#”

这必须成为

“作为第一步,您可以重写#21x ^ 2 - y#等于#z + 1#”

到目前为止,正则表达式模式是

'/(#.*?)(\D?)1([a-z])(.*?#)/i'

并作为替代

'$1$2$3$4'

但它没有完成这项工作。 任何有关模式的帮助都将受到赞赏。

由于

1 个答案:

答案 0 :(得分:2)

对于您提供的示例,您可以使用此:

\b1([a-z])

并将所有出现/匹配替换为$1

Demo

编辑:对这个问题存在误解,因此,可以使用正则表达式,以便1st也不会被替换:

\b1([a-z])(?=[^#]*#[^#]*(?:[^#]*#[^#]*#[^#]*)*$)

Demo

(?=[^#]*#[^#]*(?:[^#]*#[^#]*#[^#]*)*$)基本上确保前方有一定数量的哈希值。