2014-03-24 87 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);