Mes cordes sont de ce type : City (PR)
à partir d'une base de données, où PR signifie Province.
À la fin, je veux deux variables distinctes. La ville et la RP.
Je dois le faire avec C#. Une idée ? Merci.
Mes cordes sont de ce type : City (PR)
à partir d'une base de données, où PR signifie Province.
À la fin, je veux deux variables distinctes. La ville et la RP.
Je dois le faire avec C#. Une idée ? Merci.
En supposant que les villes ne contiennent pas (
des personnages :
string s = "City (PR)";
int p = s.LastIndexOf("(");
string city = s.Substring(0, p).Trim();
string province = s.Substring(p + 1, s.Length - p - 2).Trim();
city
est la sous-chaîne à partir du premier caractère jusqu'au dernier caractère non compris. (
caractère.province
est la sous-chaîne du premier caractère après le dernier (
jusqu'à la fin, à l'exception du dernier caractère.
Vous pouvez utiliser Regex et des groupes nommés.
string resultString = "New York (New York)";
Regex regexObj = new Regex(@"(?<City>[^(]*)\((?<PR>[^)]*)\)",RegexOptions.IgnoreCase);
var match = regexObj.Match(subjectString);
if (match.Success)
{
string city = match.Groups["City"].Value.Trim();
string province = match.Groups["PR"].Value;
}
(?<City>[^(]*)\((?<PR>[^)]*)\)
:
(?<City>XXX)
définit un groupe nommé City
[^(]*
correspond à tout caractère qui n'est pas un (
entre 0 et un nombre illimité de fois\(
correspond à un (
une fois(?<PR>XXX)
définit un groupe nommé PR
[^)]*
correspond à tout caractère qui n'est pas un )
entre 0 et un nombre illimité de fois\)
correspond à un )
une foisRegex ?
Vous pouvez diviser votre modèle en groupes de capture et partir de là.
(.*)(\(.*\))
Cela permettra de capturer la ville dans le premier groupe et votre partie PR/Province dans le second.
Edita: madgnomes regex supprime les parathénèses de la correspondance, même si la Regex devient effrayante à ce stade :)
Vous avez quelques méthodes sur string
l'une d'entre elles étant Split .
Ejemplo
var s = "City (PR)";
var words = s.Split(' ');
foreach (string word in words)
{
Console.WriteLine(word);
}
Ça s'imprimerait :
Ville
(PR)
Vous pouvez aussi le faire comme ceci
var words = s.Split(' ');
var city = words[0];
var pr = words[1];
Vous pouvez simplement supprimer le paranthèse avec d'autres méthodes de chaîne si vous le souhaitez.
On pourrait dire que ce n'est pas la meilleure façon de procéder. C'est simple et cela vous donne ce que vous voulez. Comme d'autres l'ont suggéré, les expressions rationnelles sont probablement le moyen le plus "propre" de le faire.
Note
Si vous souhaitez prendre en charge des villes dont le nom comporte des espaces, cette méthode ne vous conviendra pas vraiment. Je vous suggère alors l'une des autres réponses proposées.
Si la province est toujours entre parenthèses et que le nom de la ville ne comporte pas de parenthèses, vous pouvez utiliser la fonction Split.
string foo = "City (PR)";
string[] bar = foo.Split('(');
La variable bar aura la ville dans la première colonne du tableau, et la province dans la deuxième (mais vous voudrez enlever la parenthèse droite).
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.