簡體   English   中英

正則表達式匹配不放在括號中的字符串

[英]Regex to match a string NOT in brackets

我的配置為[HEADER].{3}$[.FOOTER]

我需要閱讀此配置並准備一個二維數組,其中[]之間的字符串是值,而沒有[]的字符串是要應用的正則表達式。

我如何拆分上面的字符串以獲得此數組。

想法是得到:

IsRegEx Value
0       [HEADER]
1       .{3}$
0       [.FOOTER]

這樣我就可以將正則表達式應用於index-1th值,並將concat數組返回到結果字符串。

我嘗試使用

string input = "[HEADER].{3}$[.FOOTER]";
char[] delimiterChars = { '[', ']'};
string[] words = input.Split(delimiterChars);

但這刪除了[],然后就沒有辦法區分給定字符串中的實際值和regex模式。

string[] parts = Regex.Split(input , @"(?<=[.,;])")可能已經起作用.,;

您可以使用以下示例:

    string input = "[HEADER].{3}$[.FOOTER]";
Regex rx = new Regex(@"(?<header>\[.*\])(?<body>.*)(?<footer>\[.*\])");
Match m = rx.Match( input );

然后收集組內容

m.Groups[ "header" ]
m.Groups[ "body" ]
m.Groups[ "footer" ]

*編輯*對於多個實例,您可以嘗試此操作

  string input =  "[HEADER].{3}$[.FOOTER][.HEADER2].{2}$[.FOOTER2]";
  Regex rx = new Regex(@"\G(?<header>\[[^]]*?\])(?<body>[^[]*?)(?<footer>\[[^]]*?\])", RegexOptions.Multiline);
  Match m = rx.Match( input );      
  while( m.Success )
  {
    m = m.NextMatch();
  }

此正則表達式將查找任意數量的頁眉和頁腳值(假設您沒有太復雜的內容,例如嵌套或轉義的括號):

var input = "[HEADER].{3}$[.FOOTER][.HEADER2].{2}$[.FOOTER2]";
var headersAndFooters = Regex.Matches(input, @"\[.*?\]");

然后,您可以使用匹配項的索引和長度來計算介於兩者之間的值(例如,在上面的示例中,從8到13的間隔是第一個正則表達式)或該正則表達式:

var regexes = Regex.Matches(input, @"(?<=(\]|^))[^\]]+?(?=\[|$)");

暫無
暫無

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

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