繁体   English   中英

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

[英]Regex pattern to separate string with semicolon and plus

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

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

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

示例字符串是

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

我正在尝试提取

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

从字符串。

要从[dbServer];[ciDBNAME];[dbLogin];[dbPasswd] AND [SIM_ErrorFound@1]_+[@IterationCount]提取内容,这是我假设您要尝试的方法,

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

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

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

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

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

编辑:似乎您只需要在方括号内输入文本即可。

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

var results = Regex.Matches(s, @"\[([^][]+)]")
    .Cast<Match>()
    .Select(m => m.Groups[1].Value)
    .ToList();

请参阅.NET正则表达式演示 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM