Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Optimized way to transfer from String to StringBuilder
Message
De
05/02/2014 15:01:29
 
 
À
05/02/2014 13:36:50
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:
01593330
Vues:
33
This message has been marked as a message which has helped to the initial question of the thread.
J'aime (1)
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);
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform