簡體   English   中英

如何為逗號分隔的字符串編寫具有匹配組的正則表達式

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

請參閱在線 C# 演示正則表達式演示

正則表達式詳細信息

  • ^ - 字符串的開頭
  • (?:([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.

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