这几天我一直在试图解决这个问题,但我无法让它发挥作用。我已经在 Stack-overflow 上查看了很多问题,但仍然无法找出解决它的正确方法。
我有表示带有数字和“多字”变量的算术表达式的字符串,例如(Car speed / Road-congestion Time) + 100
和 我需要匹配除 之外的所有内容+-*/()
。
我需要获得以下三场比赛:
- 车速
- 道路拥堵时间
- 100
以下表达式类型适用[+-\\*\\/()]?([^+-\\*\\/()]*)[+-\\*\\/()]?
于“多单词”变量中没有连字符的字符串(它在末尾添加了一个额外的空匹配)。为了区分减号和连字符,减号总是被空格包围,但我不知道如何在正则表达式中指定它。
有什么想法如何更新我的正则表达式以适应所有情况吗?另外,正则表达式应该忽略数字(仅获取上例中的前两个匹配项)。
PS - 拆分是最后一个选项,如果可能的话我想使用正则表达式。
你可以尝试这样的事情:
这是https://regex101.com/上的结果:
在这个模式中:
\b
断言单词边界以确保我们匹配整个单词。(?: ... )
是一个非捕获组,用于匹配多字变量或数字。
[a-zA-Z][-a-zA-Z0-9_ ]*
匹配多字变量。它以字母开头,可以包含字母、数字、连字符、下划线和空格。|
是交替运算符,允许模式匹配多字变量或数字。
\d+
匹配数字的一位或多位数字。