使用正则表达式从三元运算符中仅选择条件

时间:2018-04-26 09:34:28

标签: c# regex

我正在研究C#,尝试从三元运算符中获取条件。 我试过正则表达式

  

\(\s*\w+.+?(?=\?)\s*\?

但在某些情况下,它完全匹配,但在某些情况下,它匹配错误的条件。

`MatchCollection mcCollection = Regex.Matches(sInputLine, @"\(\s*\w+.+?(?=\?)\s*\?");`

sInputLine一行如下: -

  1. string result = x>你? " x大于y" :"没有结果";
  2. string result = x>你? " x大于y" :x<你? " x小于y" :x == y? " x等于y" :"没有结果";
  3. xyz.pqr((!&#34; 0&#34; .equals(x&gt; y?&#34; x大于y&#34;:&#34;没有结果&#34;); < / LI>
  4. string Abc =((string)Array [0] == null?&#34;&#34; :( string)Array [0])+&#34; &#34; +((string)Array [1] == null?&#34;&#34; :( string)Array [1]);
  5. 来自此输入行匹配字符串的

    应如下所示

    来自输入第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?
    

1 个答案:

答案 0 :(得分:0)

(\(|(?<!=)=)(?<target>(\(\w*\))?([^(]|(?<=)=)*?\?)

匹配您的所有示例。 (string)Array...很复杂,此处允许使用双=以及打开和关闭括号。

如果您要排除?及其前面的空格,只需将其从目标群组中排除:

(\(|(?<!=)=)(?<target>(\(\w*\))?([^(]|(?<=)=)*?) *\?
  • (\(|(?<!=)=)领先(或=,但没有==(=负向前瞻=)
  • (?<target>名为'target'的小组
  • (\(\w*\))?括号中的可能项目,即(字符串),(int32),(ab12)
  • ([^(]|(?<=)=)*?个字符不是(或单个=
  • \?) a?最后,目标群体的结束