Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Optimized way to transfer from String to StringBuilder
Message
De
06/02/2014 04:19:38
 
 
À
05/02/2014 15:01:29
Information générale
Forum:
ASP.NET
Catégorie:
Code, syntaxe and commandes
Versions des environnements
Environment:
VB 9.0
OS:
Windows 7
Network:
Windows 2003 Server
Database:
MS SQL Server
Application:
Web
Divers
Thread ID:
01593079
Message ID:
01593395
Vues:
28
>Here is some C# code that should create a regular expression that will replace everything in one go:
>
var testString = @"SELECT Member.FirstName,Test.LastName,Member.Bann,Test.Register,User.Blog,Member.Cie,User.NoProvince, Province.Title_E AS Province,
>Country.Title_E AS Country,Member.City,Member.NoCountry,Member.Http,Member.LastAccess FROM Member(NOLOCK) LEFT JOIN Province ON
> Member.NoProvince=Province.Numero INNER JOIN Country ON Member.NoCountry=Country.Numero WHERE Member.Numero=@Numero";
>            
>            // Assuming this list doesn't change, make the resulting Regex object static and a singleton
>            List<string> laReservedWord = new List<string>(28);
>            laReservedWord.Add("Order");
>            laReservedWord.Add("All");
>            laReservedWord.Add("Table");
>            laReservedWord.Add("From");
>            laReservedWord.Add("To");
>            laReservedWord.Add("Delete");
>            laReservedWord.Add("Insert");
>            laReservedWord.Add("Default");
>            laReservedWord.Add("End");
>            laReservedWord.Add("Index");
>            laReservedWord.Add("File");
>            laReservedWord.Add("Current");
>            laReservedWord.Add("Expand");
>            laReservedWord.Add("Image");
>            laReservedWord.Add("Read");
>            laReservedWord.Add("View");
>            laReservedWord.Add("Desc");
>            laReservedWord.Add("Update");
>            laReservedWord.Add("User");
>            laReservedWord.Add("In");
>            laReservedWord.Add("Public");
>            laReservedWord.Add("Unique");
>            laReservedWord.Add("Read");
>            laReservedWord.Add("Site");
>            laReservedWord.Add("Full");
>            laReservedWord.Add("Key");
>            laReservedWord.Add("Group");
>            laReservedWord.Add("Like");
>
>            // Combinations of beginning delimiter and ending delimiters that are valid for reserved words
>            List< Tuple<string, string>> delimiters = new List< Tuple<string, string>>();
>            delimiters.Add(new Tuple<string, string>(",", "., )"));
>            delimiters.Add(new Tuple<string, string>(".", ", )=><"));
>            delimiters.Add(new Tuple<string, string>(" ", "., ="));
>            delimiters.Add(new Tuple<string, string>("=", "."));
>            delimiters.Add(new Tuple<string, string>("(", "."));
>
>            var reservedWordPattern = string.Join("|", laReservedWord);
>
>            var laReservedWordForFieldOnly = new List<string>(1);
>            laReservedWordForFieldOnly.Add("As");
>
>            // Combinations of beginning delimiter and ending delimiters that are valid for field only reserved words
>            List< Tuple<string, string>> delimiters2 = new List< Tuple<string, string>>();
>            delimiters2.Add(new Tuple<string, string>(",", "., )"));
>            delimiters2.Add(new Tuple<string, string>(".", ", )=><"));
>            delimiters2.Add(new Tuple<string, string>(" ", ".,="));
>            delimiters2.Add(new Tuple<string, string>("=", "."));
>            delimiters2.Add(new Tuple<string, string>("(", "."));
>
>            var reservedWordForFieldPattern = string.Join("|", laReservedWordForFieldOnly);
>
>            // The expression below will match any of the reserve words that begin with any of the beginning delimiters and ends with any of the end delimiters
>            // (?<=beginDelimiter) is a positive zero width lookbehind for the beginning delimiter. Zero width prevents it from being included as part of the match
>            // (lcWordList) matches any of the words in the reserved word list. The | that separates the words acts as an OR. The parenthesis also make it a matching group.
>            // (?=[endDelimiters]) is a positive zero width lookahead for the end delimiter.
>            // "[${KeyWord}]" as the replacement substitutes the matched keyword with the match surrounded by brackets.
>
>            var matchPatternByDelimiter = delimiters.Select(tup => string.Format("((?<={0})({1})(?=[{2}]))", Regex.Escape(tup.Item1), reservedWordPattern, Regex.Escape(tup.Item2)))
>                .Union(delimiters2.Select(tup => string.Format("((?<={0})({1})(?=[{2}]))", Regex.Escape(tup.Item1), reservedWordForFieldPattern, Regex.Escape(tup.Item2))));
>            
>            var regexPattern = string.Format("(?< KeyWord>{0})", string.Join("|", matchPatternByDelimiter));
>            var regex = new Regex(regexPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
>            var retVal = regex.Replace(testString, "[${KeyWord}]");
>
>            Console.WriteLine(retVal);
Beautiful. One problem - the space before KeyWord here needs to be removed before it will run:
var regexPattern = string.Format("(?< KeyWord>{0})", string.Join("|", matchPatternByDelimiter));
I'm guessing you had to include it so that the UT pre would work ?
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform