如何仅使用正则表达式执行以下操作?

时间:2013-12-10 19:44:31

标签: c# regex

说我有以下字符串

[id={somecomplexuniquestring}test1],
[id={somecomplexuniquestring}test2],[id={somecomplexuniquestring}test3],
[id={somecomplexuniquestring}test4],[id={somecomplexuniquestring}test5],
[id={somecomplexuniquestring}test6],[id={somecomplexuniquestring}test7],
[id={somecomplexuniquestring}test8],[id={somecomplexuniquestring}test9]

有没有办法只使用正则表达式来获得以下结果[id={somecomplexuniquestring}test6]

{somecomplexuniquestring}是未知字符串,无法在正则表达式中使用。

例如,以下内容不起作用@"[id=[\s\S]+?test6]",因为它从第一个id开始。

4 个答案:

答案 0 :(得分:3)

使用RegEx是最佳解决方案吗?你已经标记了C#,所以

variableWithString.Split(",").Any(x => x.Contains("test6"));

给你存在的匹配,或者

result = variableWithString.Split(",").Where(x => x.Contains("test6")); 

给你你想要的比赛价值?

答案 1 :(得分:2)

这不起作用??

\[id={.*?}test6\]

答案 2 :(得分:1)

这完全取决于somecomplexuniquestring的限制。例如,如果您保证它们不包含任何[或]字符,您可以使用这个简单的字符:

"\[[^\[\]]*test6\]"

同样,如果它可以包含方括号但没有花括号,则可以执行类似的操作:

"\[id={[^{}]*}test6\]"

但是,如果你没有这样的保证,并且有一些转义系统可以在该字符串中加入{}或[],那么你需要告诉我们如何正确回答。

答案 3 :(得分:0)

您可以使用此模式:

@"\[[^]]*]"

如果您需要特定的测试编号,可以执行以下操作:

@"\[id={[^}]*}test6]"