J'ai plusieurs chaînes sous la forme approximative:
[some text] [some number] [some more text]
Je veux extraire le texte en [un certain nombre] en utilisant les classes Java Regex.
Je sais à peu près quelle expression régulière je veux utiliser (bien que toutes les suggestions soient les bienvenues). Ce qui m'intéresse vraiment, ce sont les appels Java pour prendre la chaîne regex et l'utiliser sur les données source pour produire la valeur de [un certain nombre].
EDIT: Je dois ajouter que je ne suis intéressé que par un seul [un certain nombre] (en gros, la première instance). Les chaînes source sont courtes et je ne vais pas chercher plusieurs occurrences de [un certain nombre].
Réponses:
Exemple complet:
Puisque vous recherchez le premier nombre, vous pouvez utiliser une telle expression rationnelle:
et
m.group(1)
vous renverra le premier numéro. Notez que les nombres signés peuvent contenir un signe moins:la source
Production:
la source
Allain a essentiellement le code java, vous pouvez donc l'utiliser. Cependant, son expression ne correspond que si vos nombres sont uniquement précédés d'un flux de caractères de mots.
devrait pouvoir trouver la première chaîne de chiffres. Vous n'avez pas besoin de spécifier ce qui précède, si vous êtes sûr que ce sera la première chaîne de chiffres. De même, il ne sert à rien de spécifier ce qui se trouve après, sauf si vous le souhaitez. Si vous voulez juste le numéro et êtes sûr que ce sera la première chaîne d'un ou plusieurs chiffres, c'est tout ce dont vous avez besoin.
Si vous vous attendez à ce qu'il soit décalé par des espaces, cela le rendra encore plus distinct à spécifier
pourrait être mieux.
Si vous avez besoin des trois parties, cela fera l'affaire:
MODIFIER Les expressions données par Allain et Jack suggèrent que vous devez spécifier un sous-ensemble de non-chiffres afin de capturer des chiffres . Si vous dites au moteur d'expression régulière que vous recherchez,
\d
il ignorera tout avant les chiffres. Si l'expression de J ou A correspond à votre modèle, alors la correspondance entière est égale à la chaîne d'entrée . Et il n'y a aucune raison de le spécifier. Cela ralentit probablement un match propre, s'il n'est pas totalement ignoré.la source
En plus de Pattern , la classe Java String a également plusieurs méthodes qui peuvent fonctionner avec des expressions régulières, dans votre cas, le code sera:
où
\\D
est un caractère non numérique.la source
Dans Java 1.4 et plus:
la source
Cette fonction collecte toutes les séquences correspondantes de string. Dans cet exemple, toutes les adresses e-mail proviennent de string.
Pour
message = "[email protected], <[email protected]>>>> [email protected]"
cela va créer une liste de 3 éléments.la source
Essayez de faire quelque chose comme ceci:
la source
.+
consomme avidement les personnages,\d+
ne capture que le à"3"
partir de"123"
. De plus, dans les littéraux de chaîne, vous devez échapper la barre oblique inverse (votre exemple ne sera pas compilé).Solution simple
Solution dans une classe Util
la source
Regardez, vous pouvez le faire en utilisant StringTokenizer
Puisque nous prenons ces données numériques dans trois variables différentes, nous pouvons utiliser ces données n'importe où dans le code (pour une utilisation ultérieure)
la source
Que diriez-vous
[^\\d]*([0-9]+[\\s]*[.,]{0,1}[\\s]*[0-9]*).*
je pense qu'il prendrait soin des nombres avec partie fractionnaire. J'ai inclus des espaces blancs et inclus,
comme séparateur possible. J'essaie d'obtenir les nombres d'une chaîne comprenant des flottants et en tenant compte du fait que l'utilisateur peut faire une erreur et inclure des espaces blancs lors de la saisie du nombre.la source
Parfois, vous pouvez utiliser la méthode .split ("REGEXP") simple disponible dans java.lang.String. Par exemple:
la source
la source
si vous lisez un fichier, cela peut vous aider
la source