Désolé, c'est probablement très simple. Mais si vous avez un caractère délimiteur sur chaque ligne et que vous voulez trouver tout le texte avant le délimiteur sur chaque ligne, quelle expression régulière ferait cela? Je ne sais pas si le délimiteur est important mais le délimiteur que j'ai est le caractère%.Comment trouvez-vous tout le texte jusqu'au premier caractère x sur une ligne?
Répondre
Votre texte sera dans le groupe 1.
/^(.*?)%/
Note: Cette capture tout le signe pour cent. Si vous voulez limiter ce que vous capturez, remplacez le. avec le escape sequence de votre choix.
Comme je l'ai mentionné, regex est inutile pour ce problème, mais au moins c'est le bon :-). – Tom
Je suis d'accord, juste pour répondre à la question :-) La plupart des langues auront quelque chose de beaucoup plus simple pour des tâches aussi simples. –
... comme votre réponse le montre clairement. –
vous n'avez pas besoin d'utiliser regex si vous ne le souhaitez pas. Selon la langue que vous utilisez, il y aura une sorte de fonction de chaîne comme split().
$str = "sometext%some_other_text";
$s = explode("%",$str,2);
print $s[0];
Ceci est en PHP, il se divise sur%, puis obtient le premier élément du tableau retourné. De même, dans d'autres langues, avec des méthodes de fractionnement.
Bien que ce ne serait probablement pas un gros problème, je vais le mentionner à nouveau, donc c'est sur ce post. "exploser" est un peu inutile car il faut regarder toute la chaîne.Il construit également une liste (et un objet chaîne supplémentaire). La sous-chaîne est conceptuellement plus simple et plus rapide car elle ne nécessite pas de regarder toute la chaîne. (Trouver la première occurrence d'un délimiteur ne nécessite pas de regarder toute la chaîne). – Tom
Et si la sous-chaîne que vous recherchez est proche de la fin? cela regarde la chaîne entière aussi. "substringing" implique 2 étapes, l'une, la recherche de l'index, la seconde, la sous-chaîne. Les deux impliquent l'appel à 2 fonctions. Est-ce plus rapide que d'appeler des éléments en mémoire (par exemple array)? Avez-vous un moyen de comparer ces deux méthodes pour me convaincre de ce que vous dites est vrai? :) – ghostdog74
En python, vous pouvez utiliser:
def GetStuffBeforeDelimeter(str, delim):
return str[:str.find(delim)]
En Java:
public String getStuffBeforeDelimiter(String str, String delim) {
return str.substring(0, str.indexOf(delim));
}
En C++ (non testé):
using namespace std;
string GetStuffBeforeDelimiter(const string& str, const string& delim) {
return str.substr(0, str.find(delim));
}
Dans tous les exemples ci-dessus, vous voulez manipuler des cas d'angle, tels que votre chaîne ne contenant pas le délimiteur.
Fondamentalement, je voudrais utiliser la sous-chaîne pour quelque chose d'aussi simple, car vous pouvez éviter de balayer toute la chaîne. Regex est surpuissance, et "exploser" ou diviser sur le délimiteur est également inutile, car il regarde toute la chaîne.
bien sûr, je laisse la manipulation des erreurs comme un exercice pour le lecteur, mais c'est l'idée :-). – Tom
sous-chaîne regarde toute la chaîne trop à droite? vous devez utiliser find() (en python) ou indexOf (en java) pour trouver l'index. – ghostdog74
@ ghostdob74: la sous-chaîne n'a pas besoin de regarder toute la chaîne. Il peut juste regarder la partie que vous sous-chaîne. De plus, l'indexOf ou find doit seulement balayer jusqu'à la première occurrence du délimiteur, puis s'arrêter ... il ne balaie pas jusqu'à la fin à moins que le délimiteur soit à la fin ou pas dans la chaîne. – Tom
Vous ne dites pas quelle est la saveur de regex, donc je vais utiliser la notation Perl.
/^[^%]*/m
La première ^
est un début anchor: normalement il correspond seulement au début de la chaîne entière, mais cette expression rationnelle est en mode multilignes remercie le « m » modifier à la fin. [^%]
est un character class inversé: il correspond à n'importe quel caractère sauf '%'. Le *
est un quantifier qui signifie pour correspondre à la chose précédente ([^%]
dans ce cas) zéro ou plusieurs fois.
- 1. Tout sélectionner sauf le premier caractère d'une chaîne
- 2. MySQL Sélectionnez où est le premier caractère
- 3. Comment puis-je obtenir le premier caractère espace non-blanc d'une ligne en utilisant php?
- 4. Comment obtenir le premier caractère d'une chaîne dans SQL?
- 5. Fetch les lignes où le premier caractère non alphanumérique
- 6. Comment entrer un caractère sterling (£) dans le shell interactif Python sur Mac OS X?
- 7. Dans Eclipse, comment remplacer un caractère par une nouvelle ligne?
- 8. Comment supprimer une ligne du fichier texte basé sur "studentId"?
- 9. Comment puis-je remplacer tout le texte avant le match dans une substitution Perl?
- 10. Smalltalk, caractère de nouvelle ligne
- 11. Strip tout, mais le texte du html
- 12. Comment définir le premier répondeur?
- 13. gérer un caractère spécial dans une chaîne tout en stockant un enregistrement sur sqlite
- 14. comment remplacer le caractère nul
- 15. Comment faire pour arrêter grep au premier match sur une ligne?
- 16. OS X Obtenez le texte en surbrillance
- 17. Hpricot, Obtenez tout le texte du document
- 18. Comment puis-je supprimer le texte avant et après un caractère particulier?
- 19. Comment sélectionner le texte dans JTextField tout en tabulation
- 20. C# Ajouter x occurrences d'un caractère à une chaîne
- 21. vbscript remplacer le texte - on travaille deux interrompt le tout
- 22. Comment lire le texte écrit sur une image?
- 23. le caractère suivant a une énorme influence sur xmlparser?
- 24. Comment supprimer tout le texte d'un document XML
- 25. Comment sélectionner tout le texte dans un Windows Forms TextBox?
- 26. Capturer premier caractère en entrant dans le mode d'édition - le contrôle d'édition personnalisé dans DataGridView
- 27. LINQ: Obtenez le premier caractère de chaque chaîne dans un tableau
- 28. TinyMCE problème où tout le texte est centré si l'utilisateur centre la ligne supérieure
- 29. Comment modifier le texte au premier plan d'un onglet WPF avec du texte imbriqué?
- 30. Comment obtenir le premier élément d'une chaîne?
Avez-vous d'autres critères sur le texte ou voulez-vous simplement tout saisir devant le%? –
Dans quelle langue est votre projet? Regex _might_ ne pas être le meilleur moyen de le faire. – beggs
Ce n'est vraiment pas un problème regex ... vous pouvez * les utiliser, mais très inutile. – Tom