簡體   English   中英

正則表達式從具有多個方括號的字符串中查找匹配項

[英]Regex to find matches from a string having multiple square brackets

我有一個如下所示的段落:

測試[!#today]的一些措辭[!condition]不滿足這個措辭[!ShowElemIf:// Student / FullName; [[[文字未被完全識別]]]; /名字]但發現有年齡的簡單標簽[!ShowElemIf://學生/年齡; xml //學生/ DOB / @格式化; y]

我需要從上面找到所有占位符/標簽,例如:[!tag]使用C#。 我嘗試使用正則表達式,但它無法找到具有“FullName”字樣的標記,如上面的粗體突出顯示。

 List<string> tags = Regex.Matches( sampleText.Replace(Environment.NewLine, ""), @"\\[!([^]]+)\\] ") .Cast<Match>() .Select(x => x.Groups[1].Value) .ToList(); 

使用此RegEx我可以在下面找到,但不能突出顯示。

  1. 今天
  2. 條件
  3. ShowElemIf://學生/年齡; XML //學生/ DOB / @格式化; Y

您需要使用.NET regex中提供的平衡組

@"\[!((?:[^][]+|(?<o>\[)|(?<-o>)])*(?(o)(?!)))]"

請參閱正則表達式演示

細節

  • \\[! - 一個[!
  • ((?:[^][]+|(?<o>\\[)|(?<-o>)])*(?(o)(?!))) - 捕獲組1匹配
    • (?: - 一個有3種選擇的非捕獲組:
      • [^][]+| - 除[]以外的1個或多個字符,或
      • (?<o>\\[)| - [推入“o”組堆棧,或
      • 從“o”組堆棧中減去(?<-o>)] - a ]
    • )* - 零次或多次出現
    • (?(o)(?!))) - 檢查“o”組堆棧是否為空的條件構造。 如果為空,則匹配繼續,否則,不返回匹配。
  • ] -文字閉合]符號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM