2017-09-18 1 views
0

en java J'ai besoin de remplacer un nombre par un mot seulement s'il n'est pas précédé du "+". Exemple:Remplacer le caractère s'il n'est pas précédé de "+"

- match1 
- match+1 

deviendrais:

matchone 
match+1 (no modify) 

J'ai essayé avec

>>>name = name.replaceAll("([^+])1", "one"); 
matcone          //required "matchone" 

Mais il ne fonctionne pas. Aucune suggestion?

Merci

+0

L'exigence de remplacer le numéro que « 1 »? Votre question ne précise pas mais votre regex suggère le contraire. –

+0

oui je n'ai besoin que de remplacer le "1" – Pecana

+1

Vous devez préciser ce que vous voulez dire par "Mais ça ne marche pas". Quelle est la sortie que vous obtenez, et quelle est la sortie que vous attendiez? –

Répondre

5

Utilisez un lookbehind négatif:

name = name.replaceAll("(?<!\\+)1", "one"); 
+0

Vous voulez dire: "look-behind" – laune

+0

Cela donne un "caractère d'échappement illégal dans chaîne littérale" :-( – Pecana

+0

Cela fonctionne parfaitement! Merci! – Pecana

1

Votre regex mange le caractère avant celui et de remplacer que par « un » aussi bien, de sorte que la sortie en première instance est " matcone ".

Vous pouvez utiliser un look derrière négatif expression (?<!) pour correspondre à tous « 1 » qui est pas précédé par un « + »:

name = name.replaceAll("(?<!\\+)1", "one");