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