Je suis en train d'analyser deux types de chaînes d'adresse d'une ligne:Python regex - analyse des adresses
Flat XXX, XXX <Building name>, <City/town>, <State> <Postcode>
DDD <Generic place name>, <Road name> road, <City/town>, <State>
à l'aide en utilisant l'expression rationnelle suivante
re.search(r'(Flat \w+)?\W*(.+)\W*([a-zA-Z]{1,2}\d+\s+\d+[a-zA-Z]{1,2})?
Ici XXX
est une chaîne de caractères alphanumériques, et DDD
est un nombre. Je m'attends à ce que le groupe 1 soit Flat XXX
si l'adresse est du premier type ou None
sinon, le groupe 2 sera XXX <Building name>, <City/town>, <State>
si l'adresse est du premier type, ou <Road name> road, <City/town>, <State>
s'il s'agit du deuxième type, et le groupe 3 est le code postal si l'adresse est du premier type ou None
sinon. Le code postal est un code postal au Royaume-Uni pour lequel mon regex (pas complètement précis mais surtout correct pour mon but) est [a-zA-Z]{1,2}\d+\s+\d+[a-zA-Z]{1,2}
. Case doit être ignorée et il ne peut y avoir aucune virgule entre Flat XXX
(si elle existe) et <Building name>
, et il peut y avoir une virgule entre la ville et le code postal (s'il existe).
>>> address1 = 'Flat 29, Victoria House, Redwood Lane, Richmond, London SW14 9XY'
>>> re.search(r'(Flat \w+)?\W*(.+)\W*([a-zA-Z]{1,2}\d+\s+\d+[a-zA-Z]{1,2})?', address1, re.I).groups()
>>> ('Flat 29', 'Victoria House, Redwood Lane, Richmond, London SW14 9XY', None)
>>> address2 = '91 Fleet, Major Road, Fleet, Hampshire'
>>> re.search(r'(Flat \w+)?\W*(.+)\W*([a-zA-Z]{1,2}\d+\s+\d+[a-zA-Z]{1,2})?', address2, re.I).groups()
>>> (None, '91 Fleet, Major Road, Fleet, Hampshire', None)
Je ne sais pas ce qui va mal, mais je pense que le groupe est plus ..\W*(.+)\W*..
milieu ou moins tout capture.
Oui, c'est: https://regex101.com/r/uC6fiZ/1 –
Qu'avez-vous finalement besoin d'obtenir des adresses? – asongtoruin
Avez-vous considéré et essayé la version non gourmande: '.. \ W * (. +?) \ W * ..'? – Evert