2015-10-13 1 views
1

Je travaille sur le noeud avec un noeud remplaçant chaîne et dois ajouter un signe d'opération mathématique (multiplication, '*') derrière un nombre chiffre (dans une cellule chaîne) . Je trouve les numéros avec le (java) expression régulièretrouver le nombre et ajouter et le caractère d'opération (java, knime)

((?:\d+\.)?\d+) 

J'ai essayé d'ajouter l'opération de multiplication en ajoutant le texte de remplacement

((?:\d+\.)?\d+)\* 

Mais le remplacement crée maintenant quelque chose comme:

à remplacer:

1.456 substance 

effectivement remplacé par:

((?:\d+\.)?\d+)\*substance 

Mais est nécessaire:

1.456*substance 

Comment puis-je modifier le texte de remplacement pour obtenir la sortie nécessaire ou quelle est la bonne approche?

Merci.

+0

Je suppose que vous vouliez utiliser une référence arrière $ 1 dans le texte de remplacement. Quelque chose comme «$ 1 * substance»? –

+0

@Jongware: Il n'y a pas de code réel. C'est un noeud string-replace-node dans knime qui sert pour le code java en arrière-plan. (désolé, je suis vraiment novice). Comparez-le avec une recherche et un remplacement, par ex. dans le bloc-notes. – Rockbar

+0

@Rockbar pourquoi pas '(\ d * \. \ D *)'? vous pouvez vérifier l'exemple http://www.regexr.com/3bvkf –

Répondre

2

Notez que lorsque vous recherche pour le texte, vous utilisez un modèle d'expression régulière , et en cas de remplacement, vous avez besoin d'une chaîne de remplacement . La chaîne de remplacement ne peut pas contenir les motifs, mais elle peut contenir des références arrière aux groupes capturés (numérotés ou nommés). En Java, les références antérieures sont référencées par $ + number. Donc, en utilisant ((?:\d+\.)?\d+)\s regex, et une chaîne de remplacement $1*, vous pouvez obtenir ce que vous avez besoin: 1.456*substance.

Voyez votre updated regex demo.

Notez que pour faire correspondre les valeurs flottantes, vous pouvez envisager d'utiliser des modèles regex (\d+(?:\.\d+)?)\s ou (\d*\.?\d+)\s. Pour un motif complexe correspondant à tous les types de nombres flottants, voir Matching Floating Point Numbers with a Regular Expression sur regular-expressions.info.

+1

"Retour-référence" est ce que je cherchais. Votre code est exactement la solution. Merci beaucoup! – Rockbar