2012-12-15 34 views
0

我有象以下以字符串格式的輸出:檢索字符串包含特定子串C#

「ABCDED 0000A1.txt PQRSNT 12345」

欲retreieve子串(一個或多個),其具有在上面的字符串的.txt 。例如對於上面它應該返回0000A1.txt。

感謝

+0

其實我正在尋找一種方法,我可以使用正則表達式來做到這一點。我可以用空格拆分字符串,然後在數組/列表項中搜索子字符串。想要檢查是否有任何可以使用表達式的簡短方法。 – Akshay

回答

0

如果分隔符是分隔符,分隔符將起作用。如果你使用oter分隔符,你可以根據需要添加

string input = "ABCDED 0000A1.txt PQRSNT 12345"; 
string filename = input.Split(' ').FirstOrDefault(f => System.IO.Path.HasExtension(f)); 

FILNAME =「0000A1.txt」,這將對於任何擴展

+0

如果字符串包含多個連續的空格,上面不會工作嗎? – Akshay

+0

@ Akshay,剛剛經過雙重和三重空間測試,它工作正常:) –

+0

謝謝。而不是string.split,我也可以使用Regex.Split。像f => System.IO.Path.HasExtension(f)這樣的表達就是我正在尋找的。 – Akshay

-1

首先拆分使用

char[] whitespace = new char[] { ' ', '\t' }; 
string[] ssizes = myStr.Split(whitespace); 

您在數組中的字符串數組然後找.TXT ...

// Find first element starting with .txt. 
// 
string value1 = Array.Find(array1, 
    element => element.Contains(".txt", StringComparison.Ordinal)); 

現在您的值1將有 「0000A1.txt」

快樂編碼。

+0

Downvote不會閱讀他想要正則表達式的部分。 :) –

+0

@Vaughan Hilts,用戶補充說,在Jigar Pandya回答後,他無法預測未來:) –

+0

沒有看到!如果Jigar確實進行了編輯,則可以獲得Upvoted! –

1

的工作,你可以拆分或在空白邊界字符串像它已經被提出多次匹配相同的正則表達式是這樣的:

var input = "ABCDED 0000A1.txt PQRSNT 12345 THE.txt FOO"; 
var match = Regex.Match (input, @"\b([\w\d]+\.txt)\b"); 
while (match.Success) { 
    Console.WriteLine ("TEST: {0}", match.Value); 
    match = match.NextMatch(); 
} 
+0

這是我試用過你的[鏈接](http://rubular.com/r/WMoQuYEMq8)。似乎沒有給出結果......任何想法?我不反對你的答案,只是想知道.. – bonCodigo

+0

是的,你輸入了「klfd dfs.fd34.3jd454ADFDf98.txtdfd dlfjd」。我的正則表達式像字段邊界一樣被打斷,所以你需要在「.txt」和「dfd」之間添加一些空格。除此之外,我還只允許單詞字符和數字,沒有點 - 你必須修改正則表達式爲\ b([\ w \ d \。] + \。txt)\ b'也是允許點。 –

+0

或更好:'\ b([\ w \ d] +(?:\。[\ w \ d] +)* \。txt)\ b'(必須以字符或數字開頭, )。 –

0

您可以使用c#regexpatternmatch :)

這裏是代碼,嘗試插入它。請給出意見。

string test = "afdkljfljalf dkfjd.txt lkjdfjdl"; 
string ffile = Regex.Match(test, @"\([a-z0-9])+.txt").Groups[1].Value; 
Console.WriteLine(ffile); 

Reference: regexp

+0

由於您沒有在空白區域中斷,所以向下投票:您的正則表達式也會匹配「ABCDED 000A1.txtFOO」,這不是他想要的。 –

0

我做了這樣的事情:

string subString = ""; 
char period = '.'; 
char[] chArString; 
int iSubStrIndex = 0; 

if (myString != null) 
{ 
    chArString = new char[myString.Length]; 
    chArString = myString.ToCharArray(); 

    for (int i = 0; i < myString.Length; i ++) 
    { 
     if (chArString[i] == period) 
      iSubStrIndex = i; 
    } 

    substring = myString.Substring(iSubStrIndex); 
} 

希望有所幫助。

相關問題