从字符串生成条件代码

Posted

技术标签:

【中文标题】从字符串生成条件代码【英文标题】:Generate Conditional Code From String 【发布时间】:2013-01-26 03:31:57 【问题描述】:

我想生成字符串的条件代码,它会检查字符串。一个例子是下面的字符串 sampleString = "C123 A091 A111 A122 B120 B309 C000" 我拥有的条件字符串示例如下

示例 1: A123 + B123 我会生成为

if sampleString.contains ("A123") And sampleString.contains ("B123") Then
'doSomething
else
'doSomething
end if

示例 2: A111+A122+(B120/-C123)

if sampleString.contains ("A111") And sampleString.contains ("A122") And (sampleString.contains ("B120") Or Not sampleString.contains ("C123")) Then
'doSomething
else
'doSomething
end if
加号 (+) 表示 AND 减号 (-) 表示不是 斜线 (/) 表示或

我可以在 VB.Net 中做到这一点吗?

【问题讨论】:

为什么要使用这种令人困惑的语法?如果有的话,请使用更有意义的内容,例如 &!| @svick 我的问题是如何在VB.NET中将字符串转换为条件语法,就像我之前写的那样。 如果你有这段代码,你会怎么做? dragonbook.stanford.edu 是的,您当然可以在 VB.NET 中执行此操作,但该语言中没有为您提供执行此类操作的内置功能。您将需要编写自己的表达式树解析器。一旦你将语法解析成一棵树,就很容易遍历树并计算结果。正如@BrianWebster 指出的那样,解析表达式树通常包含在编译器课程中。这确实不是一个过于复杂的问题,但如果你是初学者,你可能会咬得比咀嚼的多。 【参考方案1】:

使用Regex 来解决Contains 问题,方法是找到匹配项并将它们替换为1 或0。

Dim sample As String = "C123 A091 A111 A122 B120 B309 C000"
Dim input As String = "A111 +  A122 + ( B120/- C123)"

Dim nRegex As New Regex("\w+", RegexOptions.IgnoreCase)
Dim nMatches As MatchCollection = nRegex.Matches(input)

For Each nMatch As Match In nMatches

    input = input.Replace(nMatch.Value, IIf(sample.Contains(nMatch.Value), "1", "0"))

Next

现在将您拥有的特殊字符替换为在作为数学表达式计算时实际上可以为您提供正确结果的特殊字符(因为逻辑最初是数学)。

input = input.Replace(" ", "")
input = input.Replace("+", "*")
input = input.Replace("/", "+")
input = input.Replace("-1", "0").Replace("-0", "1")

毕竟你会得到这个表达式:

1*1*(1+0)

您现在可以使用Answer 中建议的任何数学评估器。如果你得到的结果大于零意味着它在逻辑上True。否则False

【讨论】:

如果我得到像-(0*0*0)+-(0+0) 这样的数学表达式,我就会得到这个错误。如果我们使用数学评估器,它会给出0 (false)的结果。

以上是关于从字符串生成条件代码的主要内容,如果未能解决你的问题,请参考以下文章

从代码点整数列表生成字符串对象?

如何在执行查询之前从Laravel的查询生成器获取原始查询字符串?

我正在尝试从具有某些条件的特殊字符中清除我的数据文件,但不满足这些条件?

如何验证字符串条件作为有效语法条件

Kafka - 从命令行生成时出错(字符('<'(代码 60)):预期有效值)

从数据库为 JPA 实体生成自定义代码