2015-10-21 53 views
-1

試圖解析這一點:C#解析字符串,從而獲得所需的格式

Copy11-1-11111-3476cf30e7-18e8-48d8-841e-f215db307cdeOctTue1533152015-res.xml 

,並得到

11-1-11111-3476cf30e7-18e8-48d8-841e-f215db307cdeOctTue1533152015.xml 

如何在最後去除開始「複製」和「-res」 ?

+4

正則表達式? ['String.Replace'](https://msdn.microsoft.com/en-us/library/fk49wtc1.aspx)?挑選你的毒藥。 –

+0

如果這是固定的寬度,你可以使用String.Substring() – Scriven

回答

1

UPDATE:如果您打算在字符串之間有Copy和/或-res並希望保留它們。以下不是最好的答案。你必須使用正則表達式。

但是,如果你正在尋找的東西簡單化,要替換所有出現的Copy-res,這裏是你如何做到這一點 -

"Copy11-1-11111-3476cf30e7-18e8-48d8-841e-f215db307cdeOctTue1533152015-res.xml".Replace("Copy", "").Replace("-res",""); 

https://dotnetfiddle.net/i3vvGq

+0

它實際上是'-res'在最後。 – DavidG

+0

謝謝。更改了答案 –

+0

String.Replace並不完全正確,因爲我們可能在中間的某個地方得到了「Copy」和「-res」:Copy11-1-111-res-343434-Copy-xxxxx-res.xml 應該改用RegEx代替。 –

0

要刪除那些發生你想要刪除的子字符串,當你在字符串中找到子字符串的索引時很容易做到。

int index = sourceString.IndexOf("Copy11-"); 
string withFirstRemoved = (index < 0) 
? sourceString 
: sourceString.Remove(index, removeString.Length); 

然後你遵循相同的,但對於其他字符串 -res

int newIndex = sourceString.IndexOf("-res"); 
string withFirstRemoved = (index < 0) 
? sourceString 
: sourceString.Remove(newIndex, withFirstRemoved.Length); 

但更好的方法,這樣做將是使用的方法,所以如果以後需要除去其他的東西,它非常靈活! :)

UPDATE

事實上,根據我收到的意見,解決辦法是有點長。如果使用Replace而不是CleanStringFromSubstrings,則可以靈活地刪除以後可能會遇到的任何字符串和子字符串的子字符串,而不僅僅是您目前遇到的問題!

public string CleanStringFromSubstrings(string original,params string[] listStr) 
    { 
     foreach (var subStr in listStr) 
     { 
      original = original.Replace(subStr, ""); 
     } 
     return original; 
    } 
+2

一個驚人的數量代碼的東西,可以在一條線! – DavidG

+0

我給了這個,如果他想刪除其他子串。事情可能會後來自動 –

+1

這就是'替換'確實... – DavidG

0

找到兩個子字符串並用空字符串替換它們。

myString = myString.Replace("Copy", string.Empty).Replace("-res", string.Empty); 
0

您可以使用String FirstIndexOf和LastIndexOf方法來獲取起始字符的位置你想刪除「Copy11-」和「-res」的字符串。一旦你有了這些索引,使用Substring方法來獲取'Copy11-'後面的所有內容,然後再次使用Substring獲取'-res'前後的所有內容。

1

很多人建議使用String.Replace但這可能不完全正確,因爲我們可能得到"Copy""-res"字符串出現在中間某處。

你可以嘗試使用正則表達式來代替:

string inputStr = "Copy11-1-11111-3476cf30e7-18e8-48d8-841e-f215db307cdeOctTue1533152015-res.xml"; 

var groups = Regex.Match(inputStr, "^Copy(.*)-res.xml$").Groups;   
var group1 = groups[1].Value;    

var output = group1 + ".xml"; 

試試:https://dotnetfiddle.net/2AVM3i

+2

我同意Minh。原始問題具體說明「如何刪除**開頭**和**結尾**的」-res「的」副本「?它並不是說這些價值觀將不會出現在中間的某個地方。使用Replace()會改變所有的事件,如果這些值出現在字符串的其他地方,可能會導致問題。如果不知道整個字符串是如何生成的,你能否說這些值不可能出現在中間? –

+0

如果您認爲它有用,請您投票選出答案:d –