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