Mes chaînes sont de ce genre: à la fin, je veux deux variables distinctes. Ville et pr. P>
Je dois le faire avec C #. Une idée? Merci. P> Ville (PR) Code> Dans une base de données, où PR représente la province. P>
8 Réponses :
Je suis noob avec des expressions régulières, pouvez-vous mieux l'expliquer? Merci.
Ne devriez-vous pas échapper aux parens extérieurs afin que le groupe de capture ne soit que "PR", pas "(PR)"?
Pour être une comparaison équitable de la solution excellente de @ DTB, cela devrait être codé. Sa brièveté est convaincante maintenant mais je suis curieux si ça va tenir
Cette solution est trop simple mais bonne à titre d'exemple. Voir Stackoverflow.com/questions/2874442/ ... pour une meilleure solution.
En supposant que les villes ne contiennent pas ( code> caractères: la ville code> est la sous-chaîne du premier caractère jusqu'à mais non le dernier ( code> caractère.
Province Code> est la sous-chaîne du premier caractère après le dernier ( code> à la fin, à l'exclusion du dernier caractère. P> P>
+1 Nice et propre, et gère mieux les noms de la ville; pourrait envisager d'utiliser lastIndexof code> pour le faire encore plus robuste
Vous devriez utiliser Regex, comme Madgnome suggéré
Si la province est toujours entre parenthèses et que le nom de la ville n'aura aucune parenthèse, vous pouvez utiliser la fonction Split.
string foo = "City (PR)";
string[] bar = foo.Split('(');
Cela devrait fonctionner, même si je dois supprimer les dernières parenthèses de PR avec une sous-chaîne.
Pourrait probablement se déplacer autour de ceci avec chaîne [] bar = foo.split ("()". Togararray (), 3) code>, qui te donnerait la barre [0] est la ville et la barre [1 ] à la province ...
Vous avez quelques méthodes sur chaîne code> l'un d'entre eux étant Split .
Exemple strong> p> qui imprimerait: p> ville p> (PR) p> Vous pouvez aussi le faire comme ça p> Vous pouvez simplement supprimer la paranthèse avec d'autres méthodes de chaîne si vous le souhaitez. p> On pourrait argumenter que ce n'est pas le meilleur façon de le faire. C'est simple et donne que tu veux que tu veux. Comme d'autres suggéraient, la Regex est probablement la méthode «la plus propre» de le faire. P> note forte> p> Si vous souhaitez prendre en charge les villes avec des espaces dans le nom, Cette méthode ne fonctionnera pas bien pour vous. Je suggérerais alors l'une des autres réponses postées. P> p>
Et si la ville est deux mots? Comme New York?
C'est sur l'ingénierie! Pourquoi penserais-on en dehors de la boîte? .. blague. N'a pas pensé aux villes avec 2 mots, puisque nous ne les avons pas, je vivais ..
@Filip Ekberg Qu'en est-il de Lilla Edet? ;-)
@fabler, ok donc 1 ville ici a une place de l'espace, chanter mon code serait comme .. Soutenir IE6;) De toute façon, mon exemple fonctionne avec la manipulation de la chaîne de base et indique maintenant à l'OP qu'il ne fonctionnera pas avec des espaces dans le mots.
@Filip ne plaisante que. J'ai eu du mal à trouver Lilla Edet pour être honnête. :-)
Toute chance que vous puissiez modifier la conception de la DB pour avoir un champ différent pour contenir s'il s'agit d'une province ou d'un état? C'est un design horrible et pour le contourner, vous devez absolument écrire du code laid ... quelque chose du long des lignes de
Bien que d'excellentes options d'analyse aient été mentionnées, je voudrais juste suggérer que vous envisagez d'aller à la source et à modifier votre requête de base de données et éventuellement même la base de données elle-même. p>
Évidemment, ce n'est pas toujours possible, ce qui est probablement pourquoi vous posez la question de la manière dont vous êtes, mais le fait que vous recevez de cette manière cela implique que les données doivent être structurées ou obtenues différemment. . p>
Est ce que j'essaie de faire une infaction;)
@Alex: bon. Toujours pousser pour la correction du système "de la bonne façon", même si vous n'avez pas la chance de le faire cette fois-ci. Sans cette poussée, votre entreprise stagne technologiquement, et c'est mauvais. Malheureusement, il est rare que quiconque en dehors de la technologie comprenne cela, d'où la nécessité d'un retour.
Vous pouvez utiliser des groupes REGEX et nommés. Explication de regex H2>
(?
(?
[^ (] * code> correspond à n'importe quel caractère qui n'est pas un ( code> entre 0 et des temps illimités li>
ul> li>
\ ( code> correspond à un ( code> une fois li>
(?
[^)] * code> correspond à n'importe quel caractère qui n'est pas un ) code> entre 0 et des temps illimités li>
ul> li>
\) code> correspond à un ) code> une fois li>
ul> p>
Regex est la voie à suivre! Cela a été fait pour ce type de tâches.
Laissez l'instruction SQL suivante Sélectionnez tout le travail pour vous:
SELECT [Name], [Address],
LTRIM(RTRIM(LEFT([CityProv],CHARINDEX('(',[CityProv])-1))) as City,
LTRIM(RTRIM(SUBSTRING( [CityProv],
CHARINDEX('(',[CityProv]) + 1,
CHARINDEX(')',[CityProv]) - CHARINDEX('(',[CityProv]) - 1))) as Prov,
[PostalCode]
FROM Stackoverflow