- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在接受一个输入字符串,我希望它是一个适用于字符串的三元语句。所以我的方法签名看起来像这样:
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:"
但这真的很复杂。我相信我可以使用正则表达式来执行它,但这只会产生另一个问题,因为这远远超出了我对正则表达式的有限理解。解决此问题的最佳方法是什么?
一些背景知识:我在数据库配置表中存储 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
中使用比较运算符,在 true1
和 false1
中> true
和 false
字符串。如果 !m.Success
则字符串格式不正确。理解正则表达式留给读者作为一个简单的练习(除非你理解正则表达式,否则你不应该使用它,因为之前或之后你将不得不修改它/修复它/调试它)
关于c# - 如何在 C# 中解析三元语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44435198/
我想知道javascript中if的简码是什么? 就像在 PHP 中一样: $res = ($x > $y)? $x: $y; 它在 JavaScript 中的转换是什么? 最佳答案 在 javasc
请问为什么下面的代码会报错? 错误: numberOne > numberTwo ? return "true" : return "false"; ^
在我的代码中,我检查系统函数是否等于零,如果是我返回另一个值,如果不是,我返回测试值。 (class.verylongfunc(arg, arg) == 0) ? othervar : cla
在 PHP 中,有没有一种方法可以使用三元条件连接两个字符串? 当我尝试这样做时,我得到的只是 else 而不是所需的 something else。 最佳答案 像这样把整个三元运算符放在方括号中:
似乎在三元运算符中存在某种类型混淆。我知道这已在其他 SO 线程中得到解决,但它始终与可空值有关。另外,就我而言,我真的只是在寻找更好的方法。 我希望能够使用 proc.Parameters[PARA
有没有办法在不进行赋值或伪造赋值的情况下进行 java 三元运算? 我喜欢在执行一堆 if/then/else 时的简洁三元代码。 我希望能够基于 boolean 代数语句调用两个 void 函数之一
我正在使用 XSLT 和 XML 来生成输出文档。 我在数据中拥有的(以我无法控制的 XML 形式)如下: 4 我需要在计算中使用这些。我看到为这些提供默认值需要对文档执行转换以提供一个有点冗长的
这个问题已经有答案了: Ternary operators in JavaScript without an "else" (13 个回答) 已关闭 4 年前。 我一直使用这样的三元表达式,但我不喜欢
我在 VB.NET 中发现了一个可以轻松重现的简单错误: Dim pDate As Date? Dim pString As String = "" ' works fine as expected
所以,我有这段代码,它实际上有效: (散列将是这样的对象:{"bob"=> "12, "Roger"=> "15", etc},并且 isGood(key) 是调用函数 isGood ,如果玩家好或坏
是否有以下 JavaScript bool 三元表达式的简写语法: var foo = (expression) ? true : false 最佳答案 当然,您只想将表达式转换为 bool 值: v
在 Java 中,如果我在常规 if 中使用三元 if 运算符,例如: if ((x > y - z) ? true : callLongWaitedMethod(many, parameteres)
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
var test = "Hello World!"; 在 Java 10+ 中,上面的代码片段可以编译,test 在编译时被推断为 String。 但是,我们可以使用条件(三元)运算符来返回不同的类型
嗨,我尝试在渲染内部使用三元条件,但遇到一些错误,这是我的代码: render() { return ( (this.emai
这里我有以下 JavaScript 代码,带有两个值。 var w = $("#id1").val(); var h = $("#id2").val(); (w == h) ? (w=350 , h
我一直想知道如何用 C++ 兼容语言编写 "A ? B : C" 语法。 我认为它的工作方式类似于:(伪代码) If A > B C = A Else C = B 有没有经验丰富的 C++
考虑两个 vector ,A 和 B,大小为 n,7 <= n <= 23 . A 和B 都只包含-1、0 和1。 我需要一个计算A 和B 内积的快速算法。 到目前为止,我一直在考虑使用以下编码将
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
如果您一开始就讨厌三元条件运算符,则无需回复 ;) 我经常看到它与赋值表达式一起使用,例如: var foo = (some_condition) ? then_code : else_code; 但
我是一名优秀的程序员,十分优秀!