Je veux vérifier une chaîne qui contient la période, ".", Au plus une fois en python.regex pour le caractère apparaissant au plus une fois
Répondre
[^.]*\.?[^.]*$
Et assurez-vous de match
, ne search
>>> dot = re.compile("[^.]*\.[^.]*$")
>>> dot.match("fooooooooooooo.bar")
<_sre.SRE_Match object at 0xb7651838>
>>> dot.match("fooooooooooooo.bar.sad") is None
True
>>>
Modifier:
Si l'on considère que des entiers et décimaux, il est encore plus facile :
def valid(s):
return re.match('[0-9]+(\.[0-9]*)?$', s) is not None
assert valid("42")
assert valid("13.37")
assert valid("1.")
assert not valid("1.2.3.4")
assert not valid("abcd")
Si la période est un caractère spécial, elle doit être échappée. Donc "\. +" Devrait fonctionner.
EDIT:
Utilisez '?' au lieu de '+' pour correspondre à une répétition ou zéro. Jetez un oeil à: re — Regular expression operations
Cela correspond à la période 1 fois ou plus. Je pense que la question veut 0 ou 1 fois. –
Vous avez raison. En regexp plus signifie un ou plusieurs. Je devrais utiliser un point d'interrogation au lieu de plus. –
Vous pouvez utiliser:
re.search('^[^.]*\.?[^.]*$', 'this.is') != None
>>> re.search('^[^.]*\.?[^.]*$', 'thisis') != None
True
>>> re.search('^[^.]*\.?[^.]*$', 'this.is') != None
True
>>> re.search('^[^.]*\.?[^.]*$', 'this..is') != None
False
(. Matches période zéro ou une fois)
Si la période devrait exister qu'une seule fois dans l'ensemble de la chaîne, puis utilisez l'opérateur ?
:
^[^.]*\.?[^.]*$
Rupture de cette valeur:
^
correspond au début de la chaîne[^.]
correspond à zéro ou plusieurs caractères qui ne sont pas des périodes\.?
correspond au caractère de période (doit être échappé avec\
comme il est char réservé) exactement 0 ou 1 fois[^.]*
est le même modèle utilisé dans 2 ci-dessus$
correspond à la fin de la chaîne
en aparté, personnellement, je ne voudrais pas utiliser une expression régulière pour cela (à moins que j'étais chec roi d'autres aspects de la chaîne pour la validité aussi). Je voudrais juste utiliser la fonction de comptage.
Sauf si vous vous assurez que vous correspondez à la chaîne * whole *, cela correspondra à ".." (regex correspond à la première période, puis se termine sans tenir compte de la deuxième période). – Richard
Assez vrai. Réponse mise à jour –
Ceci ne couvre pas le cas où une chaîne contient deux périodes avec d'autres lettres entre elles. – davidi
Aucune expression rationnelle est nécessaire, voir str.count()
:
str.count(sub[, start[, end]])
Retourne le nombre d'occurrences non-chevauchement des sous-chaîne dans l'intervalle [début, fin]. Les arguments optionnels start et end sont interprétés comme des notations de tranches.
>>> "A.B.C.D".count(".")
3
>>> "A/B.C/D".count(".")
1
>>> "A/B.C/D".count(".") == 1
True
>>>
Pourquoi avez-vous besoin de vérifier? Si vous avez un nombre dans une chaîne, je suppose que vous voudrez le traiter sous peu.Peut-être que vous pouvez le faire sans avant de sauter Vous:
try:
value = float(input_str)
except ValueError:
...
else:
...
- 1. Regex pour alphanumérique et le caractère +
- 2. Messages d'erreur xVal apparaissant deux fois
- 3. concombre + webrat: vérification du texte apparaissant deux fois
- 4. Regex pour diviser une chaîne uniquement par le dernier caractère d'espace
- 5. RegEx pour dire si une chaîne ne contient pas un caractère spécifique
- 6. réutiliser le BackgroundWorker plus d'une fois
- 7. $ 1 ne produisant aucun caractère dans regex
- 8. Comment répéter un caractère n fois dans une chaîne?
- 9. Regex pour correspondre à un minimum de 1 caractère spécial
- 10. apparaissant dans le fichier web.config
- 11. python, regex split et caractère spécial
- 12. RegEx pour définir au hasard le cas de caractères dans une chaîne
- 13. RegEx vérifie que la chaîne contient au moins un caractère minuscule, un caractère majuscule, un chiffre et un symbole
- 14. plus succincte regex rubis
- 15. Problème de Thickbox - apparaissant au bas de la page
- 16. Ancien contenu apparaissant sur le site. Effacer le cache?
- 17. Firefox et caractère apparaissant comme par magie (Â) lors de la suppression d'un
- 18. aller au caractère dans vim
- 19. au regex domaine
- 20. Regex pour le BBCode imbriqué
- 21. Quel motif de conception a semblé le plus horrible au premier regard, mais a fini par être le plus beau une fois mis en application?
- 22. De toute façon pour faire un IList.Contains() agir plus comme un caractère générique contient?
- 23. remplacer plus d'un caractère en javascript
- 24. Cliquez-Une fois l'installation du .NET Framework sur et plus
- 25. Problème créer au regex nom
- 26. Regex remplace les caractères non-alpha consécutifs par caractère unique
- 27. joindre une table plus d'une fois dans la même requête?
- 28. Arrondi au 100 le plus proche
- 29. Regex pour remplacer le charabia
- 30. Regex pour vérifier une chaîne
Pouvez-vous donner quelques exemples de ce qui serait des chaînes valides, et quelles seraient les chaînes invalides? La question est un peu vague. Par exemple, peut-il y avoir des caractères entre les périodes? Parlez-vous seulement des caractères consécutifs ou de tous les caractères de la chaîne? –
Je veux vérifier les entiers et les nombres décimaux. Donc, les chaînes valides dans ce cas seraient 2.34 ou 2. Les chaînes non valides seraient 2.2.3. En fait, ce que j'ai en ce moment est ceci: [sinon re.search ("[0-9 \.] + $", Item) ou non re.search ("^ * \.? * $", Item) : retourne "valeur invalide"]. Si vous connaissez un meilleur moyen, s'il vous plaît faites le moi savoir. Merci! – teggy