2010-07-23 3 views
7

J'ai données à partir d'un fichier CSV qui est entre guillemets simples, comme:Java Regex pour supprimer début/fin des guillemets simples mais laissez cite l'intérieur

'Company name' 
'Price: $43.50' 
'New York, New York' 

Je veux être en mesure de remplacer les guillemets simples à le début/fin de la valeur, mais laisser des citations dans les données, comme:

'Joe's Diner' should become Joe's Diner 

Je peux faire

updateString = theString.replace("^'", "").replace("'$", ""); 

mais je voulais savoir si je pouvais le combiner pour ne faire qu'un seul remplacement.

+0

Vous voulez autoriser les guillemets asymétriques * et * utiliser des guillemets pour échapper des virgules dans une cellule? Il n'est pas possible de faire les deux à la fois. – finnw

+0

Oui, vous pouvez les combiner assez facilement. Jetez un autre coup d'œil à la réponse de Josias, maintenant qu'il utilise la bonne méthode. –

Répondre

16

Vous pouvez utiliser l'opérateur ou.

updateString = theString.replaceAll("(^')|('$)",""); 

voir si cela fonctionne pour vous :)

+0

Je devais le changer pour remplacer All, mais alors cela a fonctionné. Si vous mettez à jour votre réponse, je l'accepterai – George

+0

Heureux d'avoir aidé :) – Josiah

+0

J'ai besoin de vis-à-vis de cela. Je veux convertir ce // * [@ text = 'some'Text'] en // * [@ text = 'some \' Text '] – vaibhavcool20

1
updateString = theString.replaceFirst("^'(.*)'$", "$1"); 

Notez que le formulaire que vous avez ne fonctionnera pas parce que replace utilise des chaînes littérales, pas Regexes.

Cela fonctionne en utilisant un groupe de capture (.*), auquel il est fait référence avec $1 dans le texte de remplacement. Vous pouvez aussi faire quelque chose comme:

Pattern patt = Pattern.compile("^'(.*)'$"); // could be stored in a static final field. 
Matcher matcher = patt.matcher(theString); 
boolean matches = matcher.matches(); 
updateString = matcher.group(1); 

Bien sûr, si vous êtes certain qu'il ya une seule citation au début et à la fin, la solution est simple:

updateString = theString.substring(1, theString.length() - 1); 
Questions connexes