C#正则表达式-匹配单词或数字(整数或浮点数)

时间:2018-09-22 20:05:07

标签: c# regex pattern-matching

我目前正在为数学表达式编写解析器,并且遇到以下情况: 用户可以使用参数(单词)或数字来定义公式。因此,我需要将给定的字符串解析为单词或数字,可以是整数或浮点数,我想保存结果,例如作为“左手边”(lhs): 不幸的是我对正则表达式有疑问:

我尝试过类似的事情:

Match m1 = Regex.Match("variable", @"^(?<lhs>((\w+)|(([0-9]+)(\.([0-9]*))?)))");
Match m2 = Regex.Match("1.2", @"^(?<lhs>((\w+)|(([0-9]+)(\.([0-9]*))?)))");

预期结果将是我得到一个“ lhs”组,其中包含m1的字符串“ variable”或m2的“ 1.2”。实际结果是我在m1中得到了整个单词“ variable”,但是在m2中为数字的情况下,只有第一个数字“ 1”是匹配的。 如果排除出现“ 1.2”一词的可能性,则:

Match m3 = Regex.Match("1.2", @"^(?<lhs>(([0-9]+)(\.([0-9]*))?))");

有人可以在这里帮助我吗?

1 个答案:

答案 0 :(得分:1)

\w+模式匹配字母,数字和其他一些字符,包括_。由于它是交替组中的第一部分,因此,一旦它与数字匹配,就永远不会再使用第二种选择。

您可以交换分支,并使用类似的东西

^(?<lhs>(?<num>[0-9]+(?:\.[0-9]*)?)|(?<word>\w+))

或者,如果整个字符串应该匹配:

^(?<lhs>(?<num>[0-9]+(?:\.[0-9]*)?)|(?<word>\w+))$

请参见.NET regex demo

enter image description here