[英]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.