我正在研究C#,尝试从三元运算符中获取条件。 我试过正则表达式
\(\s*\w+.+?(?=\?)\s*\?
但在某些情况下,它完全匹配,但在某些情况下,它匹配错误的条件。
`MatchCollection mcCollection = Regex.Matches(sInputLine, @"\(\s*\w+.+?(?=\?)\s*\?");`
sInputLine一行如下: -
应如下所示
来自输入第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?
答案 0 :(得分:0)
(\(|(?<!=)=)(?<target>(\(\w*\))?([^(]|(?<=)=)*?\?)
匹配您的所有示例。
(string)Array...
很复杂,此处允许使用双=
以及打开和关闭括号。
如果您要排除?
及其前面的空格,只需将其从目标群组中排除:
(\(|(?<!=)=)(?<target>(\(\w*\))?([^(]|(?<=)=)*?) *\?
(\(|(?<!=)=)
领先(或=,但没有==(=负向前瞻=)(?<target>
名为'target'的小组(\(\w*\))?
括号中的可能项目,即(字符串),(int32),(ab12)([^(]|(?<=)=)*?
个字符不是(或单个= \?)
a?最后,目标群体的结束