[英]Extract repeated patterns from a single-line string using Regex
我有一個如下所示的字符串:
attr one = 1 attr two = 2
我想提取每個attr x = y
(其中 x 和 y 可以是任何東西,包括空格,而不僅僅是數字,例如:attr name = Jonah)。
我嘗試了以下模式: Regex pattern = new Regex(@"attr\s+(?<name>.*)\s+=\s+(?<value>.*)")
但它在單個匹配中返回整個字符串並且不會將它們分開。
我怎樣才能做到這一點?
您可以使用
\battr\s+(?<name>\S*)\s+=\s+(?<value>.*?)(?=\s+attr\s|\z)
查看正則表達式演示
細節
\battr
- 一個完整的單詞attr
\s+
- 1+ 個空格(?<name>\S*)
- 組“名稱”:0 個或多個非空白字符\s+=\s+
- a =
char 包含 1+ 個空格(?<value>.*?)
- 組“值”:除換行符之外的任何 0 個或多個字符盡可能少...(?=\s+attr\s|\z)
- 緊隨其后的是 1+ 個空格、 attr
和一個空格,或者是字符串的結尾。 請參閱C# 演示(假設names
都是唯一的):
var text = "attr one = one two three attr two = 3";
var dct = Regex.Matches(text, @"\battr\s+(?<name>\S*)\s+=\s+(?<value>.*?)(?=\s+attr\s|\z)")
.Cast<Match>()
.ToDictionary(p => p.Groups["name"].Value, p => p.Groups["value"].Value);
foreach (var kvp in dct)
Console.WriteLine("{0} -> {1}", kvp.Key, kvp.Value);
Output:
one -> one two three
two -> 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.