c# - 使用正则表达式从三元运算符中仅选择条件
问题描述
我正在研究 C#,试图从三元运算符中获取条件。我尝试了正则表达式模式
\(\s*\w+.+?(?=\?)\s*\?
但在某些情况下,它完全匹配,但在某些情况下,它匹配错误的条件。
`MatchCollection mcCollection = Regex.Matches(sInputLine, @"\(\s*\w+.+?(?=\?)\s*\?");`
sInputLine 行如:-
- 字符串结果 = x > y ?"x 大于 y" : "没有结果";
- 字符串结果 = x > y ?“x 大于 y”:x < y ? “x 小于 y”:x == y ?"x 等于 y" : "没有结果";
- xyz.pqr((!"0".equals(x > y ? "x 大于 y" : "没有结果");
- 字符串 Abc = ((string)Array[0]==null? "":(string)Array[0]) + " " + ((string)Array[1]==null? "":(string)Array[ 1]);
从此输入行匹配字符串应如下所示
从输入线 1
1. x > y ?
从输入线 2
2. x > y ?
x < y ?
x == y ?
从输入线 3
3. x > y ?
从输入线 4
4. (string)Array[0]==null?
(string)Array[1]==null?
解决方案
(\(|(?<!=)=)(?<target>(\(\w*\))?([^(]|(?<=)=)*?\?)
匹配你所有的例子。此处允许的双精度以及打开和关闭的括号很(string)Array...
复杂。=
如果要排除?
它前面的和空格,只需将其从目标组中排除:
(\(|(?<!=)=)(?<target>(\(\w*\))?([^(]|(?<=)=)*?) *\?
(\(|(?<!=)=)
前导 ( 或 =,但没有 == (= 负前瞻 =)(?<target>
名为“目标”的组(\(\w*\))?
括号中的可能项,即 (string), (int32), (ab12)([^(]|(?<=)=)*?
不是 ( 或单个 = 的字符\?)
一个 ?最后,目标群体的结束