gpt4 book ai didi

c# - 如何在 C# 中解析三元语句

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:05 25 4
gpt4 key购买 nike

我正在接受一个输入字符串,我希望它是一个适用于字符串的三元语句。所以我的方法签名看起来像这样:

public string Parse(string value, string ternaryStatement)  

参数会给出这些结果:

Parse(null, "=?It's Null:It's Not Null") == "It's Null" // Empty string would 
Parse("", "=?It's Null:It's Not Null") == "It's Null" // be same as null

这个例子很简单,先用'?'分割字符串然后通过 ':'

但是我当然需要一种方法来处理转义字符,“\”、“\?”和“:”,其中“\”在任何地方都有效,“\?”仅在第一个未转义的“?”之前有效并且“:”仅在相同的“?”之后有效。

Parse(@"\?\", @"=\\\?\\?\:Match\::\:No Match\:") == ":Match:"
Parse(@"\?\", @"!=\\\?\\?\:No Match\::\:Match\:") == ":Match:"

但这真的很复杂。我相信我可以使用正则表达式来执行它,但这只会产生另一个问题,因为这远远超出了我对正则表达式的有限理解。解决此问题的最佳方法是什么?

编辑1

一些背景知识:我在数据库配置表中存储 URL 的格式(它实际上是 Dynamics 365 for Customer Engagement,但此时并不重要)。格式存储为字符串,所需的参数在代码中定义。所以通常它看起来像这样:

Format: "https://something.com?Foo={0}&Bar={1}"

Description: "0 - Foo, 1 - Bar"

描述既用于格式化 url 的人,也用于需要知道如何构建格式语句的开发人员。

我现在遇到的问题是我有一个 url 至少需要两个不同参数之一。如果其中一个值为 null 或空,如果包含在 url 中,则会出错。所以我需要一种说法,如果 Foo 为空或 Bar 为空,则不要包含名称或 &。理想情况下,我想这样实现:

"https://something.com?{0:=?:Foo={{0}}}&}{1:=?:Bar={{1}}}}" 

因此,如果 Foo 为空且 Bar 为“Bar”,则输出为

"https://something.com?Bar=Bar"

如果我们需要在 bool 值的 0/1 和 true/false 之间切换而无需更改代码,我也可以看到它被使用:

"https://something.com?{0:=0?false:true}" 

最佳答案

两个正则表达式应该是:

Regex rx = new Regex(@"(?<=(?:^|[^\\])(?:\\\\)*)\?");
Regex rx2 = new Regex(@"(?<=(?:^|[^\\])(?:\\\\)*):");

像这样使用它们:

var m = rx.Match(str);

if (m.Success)
{
int ix = m.Index;
}

这两个rx的要点是搜索到的字符串(\?:)前面必须有

(?<=(?:^|[^\\])(?:\\\\)*)

就是字符串^的开头或者不是\([^\\])加零或者偶数\\(?:\\\\)*

一个一体化的正则表达式是:

Regex rx = new Regex(@"^(?<operator>=|!=|<=|>=|<|>)(?<cmp>(?:(?:\\.)|[^?:])*)\?(?<true>(?:(?:\\.)|[^?:])*):(?<false>(?:(?:\\.)|[^?:])*)$");

if (m.Success)
{
string op = m.Groups["operator"].Value;
string cmp = m.Groups["cmp"].Value;
string true1 = m.Groups["true"].Value;
string false1 = m.Groups["false"].Value;
}

op 中,您将使用比较运算符,在 cmp 中使用比较运算符,在 true1false1 中> truefalse 字符串。如果 !m.Success 则字符串格式不正确。理解正则表达式留给读者作为一个简单的练习(除非你理解正则表达式,否则你不应该使用它,因为之前或之后你将不得不修改它/修复它/调试它)

关于c# - 如何在 C# 中解析三元语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44435198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com