用分号和加号分隔字符串的正则表达式模式

时间:2017-06-05 10:11:05

标签: c# regex

这里我使用了下面提到的代码。

MatchCollection matches = Regex.Matches(cellData, @"(^\[.*\]$|^\[.*\]_[0-9]*$)");

唯一没有这种模式的是它没有将分号和加号与主字符串分开。

示例字符串是

[dbServer];[ciDBNAME];[dbLogin];[dbPasswd] AND [SIM_ErrorFound@1]_+[@IterationCount] 

我正在尝试提取

[dbServer]
[ciDBNAME]
[dbLogin]
[dbPasswd]
[SIM_ErrorFound@1]
[@IterationCount]

来自字符串。

2 个答案:

答案 0 :(得分:1)

[dbServer];[ciDBNAME];[dbLogin];[dbPasswd] AND [SIM_ErrorFound@1]_+[@IterationCount]中提取方括号中的内容(这是我假设您正在尝试做的事情),

正则表达式(我没有引用它)应该是

\[([^\]]*)\]

您不应该使用^$,因为您对字符串的开头和结尾不感兴趣。括号将捕获方括号内的零个或多个字符的每个实例。 如果您想更详细地了解您在括号中捕获的内容,则需要将[^\]更改为其他内容。

答案 1 :(得分:1)

您的正则表达式 - ssl pinning - 匹配以(^\[.*\]$|^\[.*\]_[0-9]*$)开头的任何完整字符串,然后包含除换行符之外的零个或多个字符,并以[结束(] )或\]$后跟0+位数(_)。您也可以将模式编写为_[0-9]*$,它的工作方式也相同。

但是,您需要匹配较大字符串中的多个子字符串。因此,您应该删除^\[.*](?:_[0-9]*)?$^锚点并重试。然后,您会发现$过于贪婪,并且从第一个.*到最后一个[匹配。要解决此问题,最好使用否定字符类解决方案。例如。您可以使用与][^][]*以外的0 +字符匹配的[

编辑:似乎你只需要在方括号内得到文字。

您需要使用捕获组,在您需要获取的模式部分周围使用一对未转义的括号,然后按组ID访问该值(未命名的组从1开始编号)从左到右):

]

参见.NET regex demo enter image description here