【发布时间】:2015-07-29 14:34:37
【问题描述】:
我要做的是使用正则表达式将文本框解析为 3 个组。它是一个数学表达式,分为 3 组。该表达式最初为字符串格式,但将转换为整数以执行计算,然后再转换回字符串。第 1 组包含整数。第 2 组 包含操作数,第 3 组包含整数。
这是一个计算器应用程序,因此在单击按钮(百分比按钮)时,我想将第 3 组转换为第 1 组的百分比。
这是我尝试过的,但它不起作用。我错过了什么?
文本框中的表达式如下:
2 + 3
2 * 3
2 / 3
2 - 3
我想将每个表达式中的“3”转换为 2 的 3%。 然后显示变化:
2 + 0.06
2 * 0.06
2 / 0.06
2 - 0.06
String Expression = richTextBox1.Text;
Regex regEx = new Regex(@"([\+-]?\d+\.*\d*[eE][\+-]?\d+|[\-\+]?\d+\.*\d*)([\/\*\+\-])(-?\d+\.*\d*[eE][\+-]?\d+|-?\d+\.*\d*)");
Match m = regEx.Match(Expression);
while (m.Success)
{
double result = Convert.ToDouble(m.Groups[3].Value);
result = Convert.ToDouble(m.Groups[1].Value) / 100;
if ((result < 0) || (m.Index == 0))
Expression = regEx.Replace(Expression, result.ToString(), 1);
else
Expression = regEx.Replace(Expression, "+" + result, 1);
m = regEx.Match(Expression);
}
【问题讨论】:
-
你能发布一个你试图解析的文本的例子吗?
-
哪个部分不工作?您在计算中没有使用第 2 组或第 3 组,您只在计算中使用了第 1 组。为什么不直接要求用户输入第 1 组输入?
-
不确定您要做什么,但您的正则表达式无法正确匹配 int's/floats。这可能会更好(没有空格)
@"^([+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?)([/*+-])([+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?)$" -
文本框中的表达式如下所示: 2 + 3 或 2 * 3 或 2 / 3 或 2 - 3 我想将每个表达式中的“3”转换为 2 的 3%。然后显示变化:2 + 0.06 或 2 * 0.06 或 2 / 0.06 或 2 - 0.06
-
我永远不敢编写自己的公式解析器。尽管如此,如果我愿意,我不会使用正则表达式。取而代之的是I would (and did) use a finished one。