正则表达式 - 查找最后一个匹配项,带有左侧空格

3
我想从给定的字符串中获取最后一个匹配。目前是:2 + 5 + 8e+d。应该选择三个符号+中的第二个。
正则表达式是[(\+\s)](?=[^(\+\s)]*$),它选择第三个+
我知道这个问题非常简单,然而,以下任何一个都无法解决:
  1. [(\+\s)](?=[^(\+\s)]*$)
  2. [(\+\s)](?=[^(\+)]*$)
  3. [+](?=[^(+\s)]*$)
原始的正则表达式为:[-+*/](?=[^-+*/]*$),它选择最后一个+-/*。基本上,我想将其转换为选择" +", " -", " *", " /"
最后并且左侧有一个空格。
你可以在这里测试它:https://regexr.com/3lc1a

我想要左侧的空白,而不是右侧的。 - Lukas Naujokaitis
\s[-+\/*)](?!.*[-+\/*]\s),这个好吗? - Lukas Naujokaitis
好的,那么使用/\s[-+\/*](?!.*\s[-+\/*])/ - Wiktor Stribiżew
好的,谢谢。我应该点赞这个评论还是等你发布答案? - Lukas Naujokaitis
抱歉,如果您只提供一个字符串,那么为什么要使用正则表达式呢?您能否解释一下规则(并给出一些不同的示例),以说明我们如何组合不同的字符串以正确匹配它们? - Luis Colorado
显示剩余3条评论
2个回答

3

您可以使用

/\s[-+\/*](?!.*\s[-+\/*])/

查看正则表达式演示

细节

  • \s - 一个空格字符
  • [-+\/*] - 一个 -+/*
  • (?!.*\s[-+\/*]) - 零宽度负预测先行断言,如果当前位置右侧任意0个或多个非换行字符后紧跟着一个 -+/*,则匹配失败。

如果输入中可能有多行,请将.*替换为[^]*[\s\S]*


1

您可以使用

^.*\K [\/*+-]

演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接