簡體   English   中英

正則表達式模式匹配由分隔符

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

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