需要一些带有正则表达式的C#返回一个或多个匹配项

时间:2014-05-07 20:09:15

标签: c# regex

我有一个标签系统 标签看起来像这样

{Value:12345}
or
{ValueOR[null]:12345}

我需要 12345 如果它存在,则第二个括号之间的所有字符 号码必须始终存在

我试过了:

{Value:[0-9]+}|{ValueOR\[(.*)\]:[0-9]+}

但当然不是这样:)

在上面的示例中:如果文字是' {值:12345}'我希望看到" 12345"如果文字是{ValueOR [null]:12345}我想看到" 12345"和" NULL"

例如我正在构建一个标签替换系统来填充动态组合框 数据库中的字段将具有类似于' exec sp_GetComoboValue {value:12345}'价值' 12345'指的是我在表单上的另一个过滤字段。如果它去了,并查找12345,它的值为' 125'我想将字符串更改为exec sp_GetComoboValue 125.如果字段12345没有返回任何内容。 sp无法执行;如果标签{valueOR [NULL]:12345}'那么它将是exec sp_GetComoboValue NULL。请注意,null是任意的我不在乎字符串在' ['和']'如果OR [????]存在,我想使用它。

如果有人有兴趣,我会选择以下解决方案 {(?Value|Caption|Global)(OR[(?(.))])?:(?(.))} 这允许使用三种类型的标记来获取每种标记的类型,或者字段id。

再次感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

这个正则表达式应该有效:

\{Value(OR\[(.*)\])?:(.*)\}

答案 1 :(得分:0)

喜欢这个

{Value:(\d+)}\s*or\s*{ValueOR\[null\]:(\d+)?

对于C#的基本思路是这样,你可能想检查是否设置了组[2],因为它是可选的

Regex yourRegex = new Regex(@"{Value:(\d+)}\s*or\s*{ValueOR\[null\]:(\d+)?", RegexOptions.Multiline);
string id1 = yourRegex.Match(yourstring).Groups[1].Value;
string id2 = yourRegex.Match(yourstring).Groups[2].Value;