您可以使用組來提取較大的圖案的特定部分。你的情況:
offerDate\((\d+),(\d+)\)
然後您可以封裝成函數:
static IEnumerable<Range> ParseOfferDateRanges(string input)
{
var matches = Regex.Matches(input, @"offerDate\((\d+),(\d+)?\)");
return matches
.Cast<Match>()
.Select(ParseOfferDateMatch)
.ToList();
}
static Range ParseOfferDateMatch(Match match)
{
var fromValue = match.Groups[1].Value;
var toGroup = match.Groups[2];
var to = toGroup.Success
? short.Parse(toGroup.Value)
: (short?)null;
return new Range()
{
From = short.Parse(fromValue),
To = short.Parse(toValue)
};
}
我假設你有一個Range
結構,看起來像以下,但在C#7,你還可以返回一個元組:
public struct Range
{
public short From;
public short? To;
}
請說明您當前的代碼有什麼問題 –
我只是想檢查我的字符串是否以「offerDate」開頭。如果它是真的,那麼只有我需要存儲這個數字。當前的代碼提取數字並存儲在列表中,但是它不檢查字符串是否以「OfferDate」開頭 –
要澄清,「StringToBePassed」可以包含'offerDate(1,30)'的_多個實例嗎?我更新的答案假定您使用'Match'的倍數,但如果這個假設是錯誤的,我可以恢復到我的原始版本,它只解析一個實例。 –