![](/img/trans.png)
[英]How can I use Linq to find items with matching words from a comma separated string?
[英]How can I write a Regex with matching groups for a comma separated string
我有一個隨機輸入字符串來驗證和標記。
我的目標是檢查我的字符串是否具有以下模式
[a-zA-Z]{2}\d{2} (one or unlimited times) comma separated
So:
aa12,af43,ad46 -> is valid
,aa12,aa44 -> is NOT valid (initial comma)
aa12, -> is NOT valid ( trailing comma)
這是第一部分,驗證然后,使用相同的正則表達式,我必須為每次出現的模式創建一個組(匹配集合)
所以:
aa12,af34,tg53
is valid and must create the following groups
Group 1 -> aa12
Group 2 -> af34
Group 3 -> tg53
是否可以只使用一個驗證和創建組的正則表達式來完成它?
我寫了這個
^([a-zA-Z]{2}\d{2})(?:(?:[,])([a-zA-Z]{2}\d{2})(?:[,])([a-zA-Z]{2}\d{2}))*(?:[,])([a-zA-Z]{2}\d{2})*|$
但即使它或多或少正確地創建了組,它也缺乏驗證過程,也會得到具有錯誤模式的字符串。
任何提示都會非常受歡迎
您可以使用
var text = "aa12,af43,ad46";
var pattern = @"^(?:([a-zA-Z]{2}\d{2})(?:,\b|$))+$";
var result = Regex.Matches(text, pattern)
.Cast<Match>()
.Select(x => x.Groups[1].Captures.Cast<Capture>().Select(m => m.Value))
.ToList();
foreach (var list in result)
Console.WriteLine(string.Join("; ", list));
# => aa12; af43; ad46
正則表達式詳細信息
^
- 字符串的開頭(?:([a-zA-Z]{2}\d{2})(?:,\b|$))+
- 一次或多次出現
([a-zA-Z]{2}\d{2})
- 第 1 組:兩個 ASCII 字母,然后是兩個數字(?:,\b|$)
,
后跟一個單詞 char 或字符串結尾$
- 字符串結束。 如果您想防止匹配尾隨換行符、LF、字符,您可以使用\z
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.