首页 > 解决方案 > 检查字符串是否处于正确的模式并区分它们

问题描述

我正在为家庭作业制作一个 win 应用程序,它从文本文件中加载二次或线性方程。我有 2 种格式:ax^2 + bx + c = 0ax + b = 0

我的问题是我需要区分它是二次的还是线性的,并检查它们的格式是否正确,但我对字符串模式有疑问,想出了这样的东西,但它不起作用

string pattern = @"?([+-]?([0-9]*[.])?[0-9]+\w{1}[^2])([+-][0-9]*[.])?[0-9]+\w{1})([0-9]*[.])?[0-9]+ \=[0]);

因为我不太了解正则表达式,所以我想问你是否可以帮助我使用字符串模式,它可以选择匹配格式的第一部分 (+-, float number, char^2) 然后第二部分 (+-, float number, char) 和最后一部分 (+-, float number, = 0)

标签: c#regexwinforms

解决方案


以下几行的内容将为您检测二次方程。它不是 100% 故障安全的,但在大多数情况下应该可以工作:

[+-]?\d*(\.\d+)?(?<var>\w)\^2\s*[+-]\s*\d*(\.\d+)?(?P=var)\s*[+-]\s*\d*(\.\d+)?

将以 的形式接受事物ax^2 + bx + c,其中 a、b 和 c 是浮点数。

为了使其更具可读性,您可以像这样拆分它:

var F = $"\d*(\.\d+)?";  //a floating number
var S = $"\s*[+-]\s*";   //+/- sign with leading/trailing space(s)
var Quad = "[+-]?" + F + $"(?<var>\w)\^2" + S + F + $"(?P=var)" + S + F
var Lin = F + $"\w" + S + F + $"\s*=\s*0"

推荐阅读