如何在同一个等式中搜索/替换所有“n(” - >“n *(”和“)n” - >“)* n”?

时间:2015-06-28 17:58:48

标签: regex swift

场景:
用户可以以字符串格式将任意数量的括号对输入到等式中。但是,我需要检查以确保所有括号()都有一个相邻的乘数符号*。因此,3(应为3*()3应为)*3

我需要将所有可能的n(替换为n*(,将)n替换为)*n

实施例

1+5(3+4)7/2   ---> 1+5*(3+4)*7/2

正确的正则表达式是做什么的?

我在想[0-9]\( & \)[0-9]之类的东西。 但我不知道搜索所有模式保证的完整语法要用* insert替换。

3 个答案:

答案 0 :(得分:0)

编辑 - 误读了这个问题。

在swift中没有看到任何正则表达式功能,所以我假设它使用了一些导入的东西(反之亦然)。

不使用高级断言,一种方法是两次传递。

通过1:

查找:([\d)])(\()
替换:$1*$2

传递2:

查找:(\))([\d(])
替换:$1*$2

答案 1 :(得分:0)

没有正则表达式的痛苦(但也许不是最美丽的解决方案):

equation = '1+5(3+4)7/2'
output = ''

for index, char in enumerate(equation):
    if char == '(' and equation[index-1] != '*' or equation[index-1] == ')' and char != '*':
        output += '*'
    output += char
print('finally:', output)

答案 2 :(得分:0)

将评论转化为答案。

到目前为止输入的内容似乎有效:

  • 有关n()n的原始请求:
    (?<=\d)(?=\()|(?<=\))(?=\d)
  • 同时处理)(
    (?<=\d)(?=\()|(?<=\))(?=[\d(])

它使用两组正面外观 它不会在等式/数学术语的中间验证任何类型。

看到它的实际效果:

如果需要调整/进一步的详细信息,请发表评论。