2017-07-11 55 views
-1

試圖找出匹配正則表達式,然後從該字符串獲取值。正則表達式:檢查字符串表達式,然後過濾掉值

字符串值將是這樣的: computerFileHardware20131211.pdf computerFileSoftware20131322.pdf computerFileEngineering20232.pdf

Regex regex = new Regex(@"computerFile[^[A-Za-z]+$]([^0-9]+)\.pdf"); 
Match match = regex.Match("computerFileHardware20131211.pdf"); 
if (match.Success) 
{ 
    Console.WriteLine(match.Value); 
} 

那麼我現在要做的是確保我可以匹配正則表達式然後能夠過濾掉數字值。因此,例如對於computerFileHardware20131211.pdf數值將是20131211.

我不是很好的正則表達式。我認爲我的第一個障礙是搞清楚正則表達式。我在某處讀到了你想要過濾掉的字符串。所以這就是爲什麼我有([^ 0-9] +)。

+1

可能更容易爲你分割字符串與空格,然後每個項目檢查它是否包含「computerFileEngineering」,並以「.pdf」結束。如果是的話 - 然後切斷部分字符串? – demo

+0

感謝您的快速回復。那麼每次我都可以有不同的正則表達式。我主要想過濾掉數字值。因此,檢查正則表達式是否有效,然後提取數字值。 – MindGame

+1

我也有過像你這樣的經歷,但最終沒有正則表達式:) – demo

回答

1

嘗試像https://regex101.com/r/KWiAg0/1

Regex regex = new Regex(@"computerFile[A-Za-z]+([0-9]+)\.pdf"); 
Match match = regex.Match("computerFileHardware20131211.pdf"); 
if (match.Success) 
{ 
    Console.WriteLine(match.Groups[1].Value); 
} 

正則表達式中包含「子表達式」被括號括起來。 每個子表達式都形成一個組。使用Groups屬性,您可以訪問由正則表達式捕獲的各個組。

+0

Match.Groups是如何工作的?意思是爲什麼match.Groups [1]給我的數字值?是否因爲正則表達式中的括號?我檢查了這個鏈接,似乎這就是爲什麼它這樣做。 https://www.dotnetperls.com/regex-groups。對? – MindGame

+1

@MindGame我編輯了我的答案 – Alberto

+0

謝謝你清理。我看到第一組始終是你想要匹配的原始字符串。 – MindGame

0

如果你只是想更換號碼:

string fileName = "computerFileHardware20131211"; 
string pattern = "[0-9]{1,}"; 
string replacement = "123"; 

Regex rgx = new Regex(pattern); 

string result = rgx.Replace(fileName , replacement); 
+0

其實我只是想從文件名中過濾出來。 – MindGame

+0

@MindGame字符串結果= rgx.Replace(fileName,''); –

相關問題