2 votes

Retirer les strates de la chaîne de caractères d'un mot jusqu'à ce que le caractère

J'ai la chaîne suivante :

customer.Id as CustomerID, case when customer.Name...

Je souhaite supprimer le as CustomerID de ma chaîne, c'est-à-dire toutes les phrases qui commencent par as et se terminent par , . Comment faire ? J'ai opté pour Linq mais malheureusement cela ne semble pas fonctionner :

select(c => c.TakeWhile(ch => ch!= 'As').SkipWhile(c=>c != ','))

Comme vous le voyez dans TakeWhile Je peux utiliser char et non word. Comment puis-je faire cela avec SubString o Linq ou Regex ?

4voto

Wiktor Stribiżew Points 100073

Vous pouvez utiliser

var s = "customer.Id as CustomerID, case when customer.Name...";
var res = Regex.Replace(s, @"\s+as\s+[^,]+","");
Console.WriteLine(res);
// => customer.Id, case when customer.Name...

Voir le Démonstration en C#

L'expression rationnelle ( voir la démo ) est

\s+as\s+[^,]+

Il correspond :

  • \s+ - 1+ espaces blancs
  • as - un mot as
  • \s+ - 1+ espaces blancs
  • [^,]+ - 1+ caractères autres que ,

1voto

jpierson Points 3871

Bien que cette implémentation soit loin d'être parfaite ou concise, elle sert au moins d'exemple pour montrer comment cela pourrait être fait sans utiliser Regex, mais plutôt certaines des API de chaînes de caractères standard avec un peu de Linq.

var queryText = "customer.Id as CustomerID, case when customer.Name...";
var columns = queryText.Split(',');
var columnsWithoutAliases = 
    from c in columns
    let indexOfAs = c.LastIndexOf(" as ")
    select indexOfAs < 0 ? c : c.Substring(0, indexOfAs);
var queryTextWithAliases = string.Join(",", columnsWithoutAliases);

1voto

JohnyL Points 3688
string sql = "customer.Id as CustomerID, case when customer.Name...";
string sql2 = Regex.Replace(sql, @"\Was.+?(?=,)", "");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X