我有以下代碼。它按預期工作,但我只想知道是否可以改變它背後的邏輯,使其看起來更簡單,因爲我相信這是多餘的。是否有可能簡化這種嘗試捕捉和邏輯?
它的工作原理是這樣的:我獲取一些數據,然後嘗試通過正則表達式傳遞它。有三種可能的結果:
- 數據提取正常。
- 提取數據但不包含數字。所以又傳遞了另一個正則表達式。
- 數據未被提取。 與2)相同的正則表達式已通過。(這是我認爲可以簡化或優化)
起初,我認爲有可能是,如果正則表達式返回空或沒有拋出異常檢查的一種方式,但(指正如果我錯了),就不會有這樣的事情......所以這就是爲什麼我包含try/catch的原因。沒有它,如果滿足第三種情況,IF會返回一個異常,因爲它說m2[0].Groups[1].Captures[0].Value
超出了界限(當然是因爲它是空的)。
所以......有沒有什麼辦法讓這個看起來更優化? 非常感謝!
string regexString = @" \.\.\. .*?>(.*?)<\/a>";
MatchCollection m2 = Regex.Matches(myInput, regexString, RegexOptions.Singleline);
try
{
if (m2[0].Groups[1].Captures[0].Value.All(Char.IsDigit) == false)
{
regexString = @"page=.*?"">(.*?)</a>\n.*?<a class=""pagebtn""";
m2 = Regex.Matches(myInput, regexString);
}
}
catch (ArgumentException)
{
regexString = @"page=.*?"">(.*?)</a>\n.*?<a class=""pagebtn""";
m2 = Regex.Matches(myInput, regexString);
}
您應該解決的例外。哪個特定的語句拋出'm2 [0] .Groups [1] .Captures [0] .Value'我猜?這是一個字符串,所以'string.IsNullOrWhiteSpace()'就足夠了。一個'Regex'實例有一個'bool IsMatch'屬性可以檢查。 – CodeCaster
解決它的唯一方法是檢查正則表達式結果是否爲空。這是我的問題的一部分,因爲我不知道這是否可以完成。這就是爲什麼我使用try/catch。 – Arturo
@CodeCaster使用Regex.IsMatch將要求我把我期望得到的確切字符串,不是嗎?但事情是,我只知道它必須是一個整數,而沒有別的。 – Arturo