簡體   English   中英

使用帶有'或'運算符的正則表達式並獲得匹配的組?

[英]Using a regex with 'or' operator and getting matched groups?

我在格式的文件中有一些字符串

rid="deqn1-2"  
rid="deqn3"  
rid="deqn4-5a"  
rid="deqn5b-7"  
rid="deqn7-8"  
rid="deqn9a-10v"  
rid="deqn11a-12c"

我想要一個正則表達式來匹配每個deqnX-Y ,其中XY都是整數或者是整數和字母表的組合,並且如果在某些變量中存在匹配存儲XY. 我嘗試使用正則表達式(^(\\d+)-(\\d+)$|^(\\d+[az])-(\\d+[az]))$ ,但是如何獲取變量中匹配組的值? 對於兩個整數之間的匹配,這些組將是(我認為)

Groups[2].Value 
Groups[3].Value

並且對於兩個整數和字母組合之間的匹配將是

Groups[4].Value
Groups[5].Value

如何確定實際發生的匹配,然后相應地捕獲匹配的組?

作為該部門復位(?|)在C#不支持,我們可以使用一個名為捕獲組與像同名

deqn(?:(?<match1>\d+)-(?<match2>\d+)|(?<match1>\d+\w+)-(?<match2>\d+\w+))\b

regextester demo

C#代碼

String sample = "deqn1-2";
Regex regex = new Regex("deqn(?:(?<match1>\\d+)-(?<match2>\\d+)|(?<match1>\\d+\\w+)-(?<match2>\\d+\\w+))\\b");

Match match = regex.Match(sample);

if (match.Success) {
    Console.WriteLine(match.Groups["match1"].Value);
    Console.WriteLine(match.Groups["match2"].Value);
}

dotnetfiddle demo

你可能根本不在乎 無論如何,其中一對將是空的。 那么如果您只是將結果解釋為兩者的組合呢? 把它們打在一起吧。 第一對的第一個值加上第二對的第一個值,第一個對的第二個值加上第二個對的第二個值。 這總能給出正確的結果。

Regex regex = new Regex("^deqn(?:(\\d+)-(\\d+)|(\\d+[a-z])-(\\d+[a-z]))$");
foreach (String str in listData)
{
    Match match = regex.Match(str);
    if (!match.Success)
        continue;
    String value1 = Groups[1].Value + Groups[3].Value;
    String value2 = Groups[2].Value + Groups[4].Value;
    // process your strings
    // ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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