2011-05-22 5 views
0

Comment entourer des mots avec des guillemets Ex. états-unis, des États-Unis, avec « États-Unis », « États-Unis »,Comment entourer des mots avec des guillemets

+5

Définir "mot". "Etats-Unis" semble être deux mots pour moi. –

+0

J'ai une chaîne comme dans ex. Chaîne s = "États-Unis, US" remplacez cette chaîne par la chaîne s1 = "'États-Unis', 'US'" – Michael27

+0

Avez-vous l'intention d'entourer de guillemets des parties de chaîne entre ','? L'échantillon que vous avez fourni est vague, c'est évidemment ce que les Etats-Unis ne sont pas un "mot" –

Répondre

4

Dans votre cas

resultString = Regex.Replace(subjectString, @"\b[^,]+\b", "'$0'"); 

travailleraient, mais vous pouvez définir vos besoins un peu plus clairement.

EDIT:

Maintenant que vous avez précisé que votre chaîne est toujours divisée en deux parties (Nom et code de pays), cela pourrait être mieux:

resultString = Regex.Replace(subjectString, @"^(.+),\s*([^,]+)$", "'$1', '$2'", RegexOptions.Multiline); 

Cela va changer la chaîne multiligne

United States, US 
Switzerland, CH 
BOLIVIA, PLURINATIONAL STATE OF, BO 

dans

'United States', 'US' 
'Switzerland', 'CH' 
'BOLIVIA, PLURINATIONAL STATE OF', 'BO' 

(mais fonctionne également si vous l'appliquez à une ligne à la fois).

+1

Cela va casser par ex. avec "Nation of Brunei, la Demeure de la Paix, BR" - notez que ceci est le nom officiel: http://en.wikipedia.org/wiki/Brunei. En outre, divers autres gotchas comme "Danemark, Royaume de, DK". Comme vous le dites, les exigences ne sont pas claires. – Piskvor

+0

Votre regex produit rersult - «Etats-Unis», «US».Je pense que vous devriez remplacer '*' par '+' –

+0

@Piskvor J'ai des noms de pays de http://www.iso.org/iso/english_country_names_and_code_elements – Michael27

3
var quoted = myString.Replace("US", "'US'").Replace("United States", "'United States'"); 

Pas besoin de regex pour une tâche simple.

+0

En fait, regex est nécessaire car j'ai une liste de chaînes à partir du fichier txt – Michael27

+0

Si cette liste de chaînes est Liste , alors utilisez foreach en combinaison avec la classe StringBuilder. Vous aurez bien meilleure performance que regex. –

1

Voici une solution simple, en utilisant la manipulation de chaînes:

string s = "BOLIVIA, PLURINATIONAL STATE OF, BO"; 

Wrap avec des guillemets simples:

int lastComma = s.LastIndexOf(", "); 
s = String.Format("'{0}', '{1}'", s.Remove(lastComma), s.Substring(lastComma + 2)); 

Si vous avez toujours 2 lettres à la fin de la chaîne, vous pouvez simplifier encore plus loin:

int lastComma = s.Length - 4; 

Vous voulez probablement une vérification d'erreur, mais cela ressemble à un ver tâche simple, qui ne nécessite rien d'aussi sophistiqué qu'une expression régulière.

Questions connexes