est ici une réponse à votre question:
interprétation que vous voulez _
(non -
), cela devrait faire le travail:
>>> tests = ["a", "A", "a1", "a_1", "1a", "_a", "a\n", "", "z_"]
>>> for test in tests:
... print repr(test), bool(re.match(r"[A-Za-z]\w*\Z", test))
...
'a' True
'A' True
'a1' True
'a_1' True
'1a' False
'_a' False
'a\n' False
'' False
'z_' True
>>>
résister vaillamment à la tentation d'utiliser $
; voici pourquoi:
Bonjour, bonjour, utilise $
est MAUVAIS, utilisez \Z
à la place
>>> re.match(r"[a-zA-Z][\w-]*$","A")
<_sre.SRE_Match object at 0x00BAFE90>
>>> re.match(r"[a-zA-Z][\w-]*$","A\n")
<_sre.SRE_Match object at 0x00BAFF70> # WRONG; SHOULDN'T MATCH
>>>
>>> re.match(r"[a-zA-Z][\w-]*\Z","A")
<_sre.SRE_Match object at 0x00BAFE90>
>>> re.match(r"[a-zA-Z][\w-]*\Z","A\n")
>>> # CORRECT: NO MATCH
The Fine Manual dit:
'$'
correspond à la fin de la chaîne ou juste avant la nouvelle ligne à la fin de la chaîne [mon accentuation], et en mode MULTILINE correspond également avant une nouvelle ligne. foo correspond à la fois à 'foo' et 'foobar', tandis que l'expression régulière foo $ ne correspond qu'à 'foo'. Plus intéressant, la recherche de foo. $ Dans 'foo1 \ nfoo2 \ n' correspond normalement à 'foo2', mais 'foo1' en mode MULTILINE; rechercher un seul $ dans 'foo \ n' trouvera deux correspondances (vides): une juste avant le retour à la ligne, et une à la fin de la chaîne.
et
\ Z
Matches seulement à la fin de la chaîne.
=== Et maintenant quelque chose de complètement différent ===
>>> import string
>>> letters = set(string.ascii_letters)
>>> ok_chars = letters | set(string.digits + "_")
>>>
>>> def is_valid_name(strg):
... return strg and strg[0] in letters and all(c in ok_chars for c in strg)
...
>>> for test in tests:
... print repr(test), repr(is_valid_name(test))
...
'a' True
'A' True
'a1' True
'a_1' True
'1a' False
'_a' False
'a\n' False
'' ''
'z_' True
>>>
est la chaîne vide à laisser? – Svante
Lequel est-il maintenant, '-' ou' _'? – Svante
La chaîne vide ne peut pas être autorisée. "_" ceci est hypen pas dash – user279315