簡體   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