[英]Regex pattern match by delimiter
從以下查詢中獲取 gs 的值。
(2|3|4|5|6|7|8|9|10|11|gs=accountinga sdf* |gs=tax*|12|ic='38')
我試過下面的模式
(?<=gs=)(.*)([|])
但這會導致gs=accounting asdf* |gs=tax*|12|
期望的輸出應該是: accounting asdf*,tax*
這可能隨着模式的變化而改變嗎?
此正則表達式將根據您的需要進行匹配。
(?<=gs=)([^|)]*)
它還將處理 gs 是最后一個子句而不在組中包含右括號的情況。
我建議 2 個解決方案,請參閱他們的在線演示。
一種是基於正則表達式的:
var x = "(2|3|4|5|6|7|8|9|10|11|gs=accountinga sdf* |gs=tax*|12|ic='38')";
var result = Regex.Matches(x, @"(?:^|\|)gs=([^|]*)")
.Cast<Match>()
.Select(p => p.Groups[1].Value)
.ToList();
foreach (var s in result)
Console.WriteLine(s);
注意(?:^|\\|)gs=([^|]*)
模式只會匹配gs=
開頭或之后的字符串|
, 然后([^|]*)
將捕獲除|
之外的零個或多個字符進入第 1 組,稍后您將使用Select
收集該組。 請參閱正則表達式演示。
或基於非正則表達式,只需拆分|
, 檢查項是否以gs=
開頭,然后用=
分割得到最后一部分:
var res2 = x.Split('|')
.Where(p => p.StartsWith("gs="))
.Select(n => n.Split('=').LastOrDefault())
.ToList();
foreach (var t in res2)
Console.WriteLine(t);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.