Ceci est mon essai, il met en fait le premier et les seconds groupes de 3 chiffres entre parenthèses alors que je n'ai besoin de mettre le premier groupe qu'entre parenthèses pour respecter le format formel du numéro de téléphone américain comme (XXX) XXX-XXXX. On me demande de le faire en utilisant uniquement re.sub, ce qui signifie que c'est une question de modèle et une syntaxe correcte qui me manque en fait. Merci beaucoup.
import re def convert_phone_number(phone): result = re.sub(r"(\d+-)", r"(\1)", phone) # my actual pattern - change only this line return result print(convert_phone_number("My number is 212-345-9999.")) # output should be: My number is (212) 345-9999. # my actual output: My number is (212-)(345-)9999. print(convert_phone_number("Please call 888-555-1234")) # output should be: Please call (888) 555-1234 # my actual output: Please call (888-)(555-)1234
3 Réponses :
Vous pouvez utiliser
re.sub(r'(?<!\S)(\d{3})-', r'(\1) ', phone)
Voir la démo de regex
Détails
(?<!\S)
- une limite d'espace blanc à gauche(\d{3})
- Groupe de capture n ° 1: trois chiffres-
- un trait d'union.Le remplacement est la valeur du groupe 1 entre crochets et un espace après (qui remplacera le trait d'union).
@ Cyber-Tech Si vous avez besoin de plus de précisions, veuillez laisser un commentaire ici.
re.sub (r "\ b \ s (\ d {3}) -", r "(\ 1)", téléphone)
Cela capture le caractère d'espacement précédent.
import re def convert_phone_number(phone): result = re.sub(r"\b\s(\d{3})-\b", r" (\1) ", phone) return result
Corrigez Wiktor Stribizew. Merci beaucoup. Par souci de connaissance, pourriez-vous m'expliquer le code, sinon, me donner une référence en ligne pour apprendre et maîtriser cette compétence re.sub déroutante. Merci beaucoup. Postez-le sous forme de code afin que je puisse cliquer dessus comme solution. Meilleures salutations.