J'ai une chaîne qui contient deux guillemets simples, le '
caractère. Entre les guillemets simples se trouvent les données que je veux.
Comment puis-je écrire une expression régulière pour extraire "les données que je veux" du texte suivant?
mydata = "some string with 'the data i want' inside";
java
regex
string
text-extraction
asdasd
la source
la source
this 'is' my 'data' with quotes
cela, il s'arrêterait tôt et retourneraitis
au lieu de correspondre à autant de caractères que possible et retourneraitis' my 'data
, ce qui est le comportement par défaut.Vous n'avez pas besoin de regex pour cela.
Ajoutez apache commons lang à votre projet ( http://commons.apache.org/proper/commons-lang/ ), puis utilisez:
la source
la source
Il existe un simple revêtement pour cela:
En rendant le groupe de correspondance facultatif, cela répond également aux citations non trouvées en retournant un blanc dans ce cas.
Voir la démo en direct .
la source
Parce que vous avez également coché Scala, une solution sans regex qui gère facilement plusieurs chaînes entre guillemets:
la source
.split('\'').get(2)
ou quelque chose dans cette mesure en Java? Je pense que vous devrez peut-être obtenir une analyse cérébrale si vous pensez que c'est une solution lisible - il semble que quelqu'un essayait de me faire du golf de code.la source
comme en javascript:
l'expression rationnelle réelle est:
/'([^']+)'/
si vous utilisez le modificateur non gourmand (selon un autre post) c'est comme ça:
c'est plus propre.
la source
À Scala,
la source
String dataIWant = mydata.split("'")[1];
Voir la démo en direct
la source
Apache Commons Lang fournit une multitude d'utilitaires d'assistance pour l'API java.lang, notamment les méthodes de manipulation de chaînes. Dans votre cas, les sous-chaînes de début et de fin sont les mêmes, il suffit donc d'appeler la fonction suivante.
Si les sous-chaînes de début et de fin sont différentes, utilisez la méthode surchargée suivante.
Si vous voulez toutes les instances des sous-chaînes correspondantes, utilisez alors,
Pour l'exemple en question pour obtenir toutes les instances de la sous-chaîne correspondante
la source
vous pouvez utiliser cette i boucle while pour stocker toutes les sous-chaînes de correspondance dans le tableau si vous utilisez
if (matcher.find()) { System.out.println(matcher.group(1)); }
vous obtiendrez des sous-chaînes de correspondance afin que vous puissiez l'utiliser pour obtenir toutes les sous-chaînes de correspondances
la source
ajouter la dépendance apache.commons à votre pom.xml
Et le code ci-dessous fonctionne.
la source
Certains comment le groupe (1) n'a pas fonctionné pour moi. J'ai utilisé le groupe (0) pour trouver la version URL.
la source