2014-03-24 88 views
0

刪除某些部分從以下字符串String1我想以前「是」刪除一切,之後一切「UHR」快速的方法來從字符串

string String1 = "Angebotseröffnung am 27.03.2014, 11:00 Uhr, Ort: Vergabestelle, siehe a)."; 

所以在最後我有這樣的字符串。 「am 27.03.2014,11:00 Uhr」

我正在使用此代碼,但我知道這不是一個好方法。有人能幫助我提供更好的選擇嗎?

String1 = String1.Replace("Angebotseröffnung", ""); 
String1 = String1.Replace("Ort", ""); 
String1 = String1.Replace("Vergabestelle", ""); 
String1 = String1.Replace("siehe", ""); 
String1 = String1.Replace("a)", ""); 

回答

2

另一種選擇是使用Regex.Match。

string output = Regex.Match(String1, "am.*Uhr").Value; 

但如果你一定在你的字符串amUhr它只會工作。 根據您的輸入,您可能需要am.*?Uhr(?:a|p)m.*?Uhr正則表達式。

+2

如果你使用正則表達式,爲什麼不使用正則表達式替換? – Gusdor

+0

在這種情況下沒有替換點。你需要用2代替積極的lookahead來代替'Uhr',積極的後代代替'Uhr' - 這是不必要的複雜性。 –

+1

@Gusdor撕掉他想要的部分比刪除其他部分要快。 – khellang

3

嘗試是這樣的:

var string1 = "Angebotseröffnung am 27.03.2014, 11:00 Uhr, Ort: Vergabestelle, siehe a)."; 

var startIndex = string1.IndexOf("am"); // 18 
var endIndex = string1.IndexOf("Uhr") + 3; // 42 

// Get everything between index 18 and 42 
var result = string1.Substring(startIndex, endIndex - startIndex); 

// result: "am 27.03.2014, 11:00 Uhr" 
+0

上午' '太短而無法安全保護,如果'startIndex'或'endIndex'爲'-1'(未找到)則拋出Substring。 –

+1

@TimSchmelter我沒有說這適用於* all *的情況。但它在他指定的情況下起作用。 – khellang

1

如果格式嚴格,總是包含Angebotseröffnung amUhr這是最有效的:

string String1 = "Angebotseröffnung am 27.03.2014, 11:00 Uhr, Ort: Vergabestelle, siehe a)."; 
string result = null; 
string startPattern = "Angebotseröffnung am "; 
int start = String1.IndexOf(startPattern); 
if (start >= 0) 
{ 
    start += startPattern.Length; 
    string endPattern = " Uhr"; 
    int end = String1.IndexOf(endPattern, start); 
    if (end >= 0) 
     result = String1.Substring(start, end - start + endPattern.Length); 
} 
+0

感謝您的回覆。我正在尋找一種快捷的方式,@Ulugbek Umirov建議的方法很快且簡單。 – Kamran

0

,如果你知道該格式將始終是相同的=>

var r = new Regex("am \d{1,2}.\d{1,2}.\d{4} Uhr"); 
var result = r.Match(input); 
0

如果字符串將始終包含amUhr,並且將始終有am之前UHR

string String1 = "Angebotseröffnung am 27.03.2014, 11:00 Uhr, Ort: Vergabestelle, siehe a)."; 

int indexOfAm = String1.IndexOf("am"); 
int indexOfUhr = String1.IndexOf("Uhr"); 

string final = String1.Substring(indexOfAm, (indexOfUhr + 3) - indexOfAm); 
0

隨着StringBuilder的,替換以同樣的方式與字符串,但它並不需要它的結果將被分配

class Program 
     { 
      static void Main() 
      { 
     const string samplestring = "hi stack Over Flow String Replace example."; 

     // Create new StringBuilder from string 

       StringBuilder str = new StringBuilder(samplestring); 



       // Replace the first word 
       // The result doesn't need assignment 
       str.Replace("hi", "hello"); 
       Console.WriteLine(b); 
     } 
     } 

    Output Will be --> 
    hello stack Over Flow String Replace example 
0

試試這個

String1 = String1.Substring(String1.IndexOf("am"), (String1.IndexOf("Uhr") - String1.IndexOf("am"))+3);