2017-06-16 3 views
-1

Dies ist das erste Mal, dass ich mit Regex arbeite.Ersetzen und entfernen Sie eine Zeichenfolge über Regex

Die Zeichenfolge unter

var value ="abc ltd as yes" 

Notwendigkeit, Änderung

var value ="abc Limited" 

ich den folgenden Code haben:

public static string Attempt_Prefix_Removal(string prefix, string replacement, bool remove = false) 
    { 

     if (remove == true) 
     { 

      var yesy = $"(?<!prefix)" + prefix + ".*"; 

      var test = Regex.Replace(prefix.ToLower(), $"(?<!prefix)" + prefix + ".*", replacement); 



     } 

     var output = (remove == true) ? Regex.Replace(prefix.ToLower(), $"(?<!prefix)" + prefix + ".*", replacement) : Regex.Replace(prefix.ToLower(), $"(?<!prefix)" + prefix + "", replacement); 

     return output; 


    } 

die Werte, die an die Methode übergeben werden, sind

prefix ="ltd", replacement = "Limited" , remove = ture 

nach dem Code das Ergebnis läuft

abc Limited as yes 

was tun müssen, um i Fahrt von as yes zu erhalten ändern ?? dank

+0

[Gefällt mir?] (Https://regex101.com/r/1UxCSa/2) – Olian04

+2

Was sind die Anforderungen? Ersetzen Sie "ltd" durch "Limited" wenn ....? Wann? Und was entfernen? 'wie ja' oder der Rest der * Zeichenfolge *? Oder * Linie *? BTW, [ich bekomme 'Limited' als Ausgabe] (http://ideone.com/osTGba). –

+0

Ziemlich seltsam, dass es Präfix Entfernung genannt wird, aber es entfernt das "Suffix". Sie können ltd durch Limited ersetzen und Sie können auch yes durch Limited ersetzen und Sie können ltd auch als yes durch Limited ersetzen. –

Antwort

1

Sie diesen Code nutzen können:

var prefix ="ltd"; var replacement = "Limited"; 
var pat = [email protected]"(?s)(?<!\w){Regex.Escape(prefix)}(?!\w){remove ? ".*" : string.Empty}"; 
return Regex.Replace(val, pat, replacement.Replace("$", "$$")); 

Siehe C# demo online

die wichtigsten Punkte sind hier:

  • (?s)-. Spiel ein Newline ermöglicht
  • (?<!\w){Regex.Escape(prefix)}(?!\w) (falls Sie .* im Muster verwenden) - die (?<!\w) negativen Lookbehind, das Spiel wird scheitern, wenn der aktuelle Standort ist mit einem Wort char voran (Sie können zwicken weiter das Muster Lookbehind nach Ihren Wünschen)
  • {remove ? ".*" : string.Empty} - dies entweder .* anhängen (wenn removewahr) ist oder nicht.
1
private string regexOp(string sentence, string word, string wordtoReplace, bool isRemove) 
    { 
     var retValue = sentence; 
     if (isRemove) 
     { 
      var Pattern = "^.*?(?=" + word + ")"; 
      Match result = Regex.Match(sentence, @Pattern); 
      if (!string.IsNullOrEmpty(result.Value)) 
       retValue = result + wordtoReplace; 
     } 
     else 
      retValue = Regex.Replace(sentence, word, wordtoReplace); 

     return retValue; 
    } 

versuchen, diese Methode, dies funktionieren wird, wie Sie mit dynamischer erwartet, vergessen Sie nicht, es als Antwort zu markieren, ob dies wirklich Ihnen geholfen,

Verwandte Themen