如何仅使用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=[sS]+?test6]",因为它从第一个id开始。

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

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

给你现有的匹配,或者

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

给你想要的匹配值?

这不起作用??

[id={.*?}test6]

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

"[[^[]]*test6]"

类似地,如果它可以包含方括号,但不包含大括号,则可以执行类似的操作:

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

但是,如果您没有这样的保证,并且有某种转义系统可以在该字符串中包含{}或[],那么您需要让我们知道这是如何正确回答的。

您可以使用以下模式:

@"[[^]]*]"

如果你想要一个特定的测试编号,你可以这样做:

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

最新更新