2016-05-18 6 views
1

Wie ich eine URL in # Transformation, dieC# regex transformiert ähnlich wie Python

zu diesem Python-Code ist ähnlich
import re 
url = http://active.com 
url1 = re.sub(r'(^htt[^\/]*\/\/)(.*)',r'\1www\.$2',url) 

Eingang:

http://active.com 

erwartete Ausgabe:

http://www.active.com 

auch wie könnte ich www übergeben. aus einer Variablen in C#

zB

string domain_part = "www." 

dann muss ich über Variable in Transformationen verwenden?

+0

Haben Sie etwas dagegen unternommen? –

+0

Was wäre, wenn Sie "http: // www.active.com" als Eingabe hätten? Sie würden 2 'www' nach einem Austausch haben. –

Antwort

0

In C# ist Regex.Replace ein Äquivalent von Pythons re.sub. Beachten Sie, dass Backreference Stile unterscheiden: \1 in Python Ersetzung Zeichenfolge ist $1 (und \g<1> ist ${1}) in C#.

Das Raw-String-Literal in C# hat eine @"" Notation (entspricht r'' in Python).

können Sie verwenden

//var url = "http://www.active.com"; // http://www.active.com 
var url = "http://active.com"; // http://www.active.com 
var domain_part = "www."; 
var regex = new Regex(string.Format(@"(^htt[^/]*//)(?!{0})(.*)", Regex.Escape(domain_part))); 
var res = regex.Replace(url, "$1" + domain_part + "$2"); 
Console.WriteLine(res); 

anzeigen IDEONE demo

Erläuterungen:

  • Regex.Escape(domain_part) entkommt die Zeichenkette für die Verwendung in einem regex
  • (^htt[^/]*//)(?!{0})(.*) enthält einen negativen Look-Ahead, die fehlschlagen die Übereinstimmung, wenn bereits ein Domain_Teil innerhalb von t vorhanden ist Die Zeichenfolge
  • "$1" + domain_part + "$2" fügt den dynamischen Teil der Domäne ein.
+0

Froh, dass es für dich funktioniert hat. Bitte bedenken Sie auch, dass meine Antwort hilfreich für Sie war. –