相关疑难解决方法(0)

将数学表达式与正则表达式匹配?

例如,这些是有效的数学表达式:

a * b + c
-a * (b / 1.50)
(apple + (-0.5)) * (boy - 1)
Run Code Online (Sandbox Code Playgroud)

这些是无效的数学表达式:

--a *+ b @ 1.5.0  // two consecutive signs, two consecutive operators, invalid operator, invalid number
-a * b + 1)  // unmatched parentheses
a) * (b + c) / (d  // unmatched parentheses
Run Code Online (Sandbox Code Playgroud)

我没有匹配浮点数的问题,但是括号匹配有困难.任何的想法?如果有比正则表达更好的解决方案,我也会接受.但正则表达式是首选.

========

编辑:

我想对我对"已接受的答案"的选择做一些评论,希望那些有相同问题并找到这个帖子的人不会被误导.

我认为有几个答案"被接受",但我不知道哪一个是最好的.所以我随机选择了接受的答案(差不多).除了接受的答案,我建议阅读Guillaume Malartre的答案.他们都为我的问题提供了实用的解决方案.有关严谨/理论上的答案,请在接受的答案下阅读David Thornley的评论.正如他所提到的,Perl对正则表达式的扩展(源于常规语言)使其"不规则".(我在我的问题中没有提到任何语言,所以大多数答复者都假设正则表达式的Perl实现 - 可能是最流行的实现.当我发布我的问题时,我也是如此.)

如果我上面说错了,请纠正我.

regex parsing

17
推荐指数
4
解决办法
1万
查看次数

为什么Regex.Match在结果中包含非捕获组?

在匹配正则表达式时,我想从结果中排除非捕获组.我错误地认为他们被默认排除在外,因为他们被称为非捕获组.

但是出于某种原因,Regex.Match表现得好像我甚至没有指定一个非捕获组.尝试在立即窗口中运行它:

System.Text.RegularExpressions.Regex.Match("b3a",@"(?:\d)\w").Value
Run Code Online (Sandbox Code Playgroud)

我期待结果

"a"
Run Code Online (Sandbox Code Playgroud)

但实际上

"3a"
Run Code Online (Sandbox Code Playgroud)

这个问题建议我查看各组,但结果中只有一个组,它也是"3a".它包含一个Capture,也就是"3a".

这里发生了什么?Regex是否有问题,或者我需要设置一个选项吗?

.net c# regex

0
推荐指数
1
解决办法
195
查看次数

标签 统计

regex ×2

.net ×1

c# ×1

parsing ×1