2
votes

RegEx pour faire correspondre les adresses structurées

J'ai une expression régulière que je dois ajouter à

regex

2 Main Street -> 'Main Street'

5 & 6 Shore Lane -> 'Shore Lane'

7/8 Bay Way -> 'Bay Way'

73-97 Park Dr E -> 'Park Dr E'

2781  Boyle Street -> 'Boyle Street'

267 1/2 Brad St -> 'Brad St'

433 W. 49th St. -> 'W 49th St'

One  Building Road -> 'One Building Road'

J'essaie essentiellement d'analyser le numéro de la porte à partir des adresses, mais j'ai rencontré des données qui n'ont pas le numéro de la porte mais juste le nom de la rue. Dans ce cas, je veux renvoyer le nom de la rue mais mon expression régulière actuelle ne correspond pas correctement. Je dois faire passer la dernière ligne dans le lien ci-dessus.

^\d*(?: ?\d+ ?[&\/-] ?\d+)? +([\w.]+(?: +\w+)*) *


2 commentaires

Veuillez publier tous les détails ici, pas seulement sur un site distant.


@Thefourthbird qui supprime le premier mot 'One' sur lequel je veux faire correspondre


3 Réponses :


1
votes

Essayez de déplacer l'espacement entre le numéro de rue et le nom de la rue dans le premier groupe facultatif.

...\d+ +)? (...

C'est-à-dire déplacer la partie + dans le groupe. Modifier:

...\d+)? +(...

En:

^\d*(?: ?\d+ ?[&\/-] ?\d+ +)?([\w.]+(?: +\w+)*) *


1 commentaires

Ça casse mes valises 1,5,7



2
votes

Inutile de rendre [] + obligatoire si tout ce qui précède est facultatif.

^ \ d * (?: []? \ d + []? [& \ / -] []? \ d +)? [] * ([\ w.] + (?: [] + \ w +) *)

https://regex101.com/ r / EiNNaz / 1


Cependant, si vous avez besoin d'une séparation entre un numéro de maison en option
et le Nom de la rue , il faut faire preuve d'un peu de créativité.

Limiter la première lettre du Nom de la rue à un mot non numérique [^ \ W \ d]
et utilisez un espace blanc Boundary (? avant.
Ainsi, tout va bien

^ \ d * (?: []? \ D + []? [& \ / -] []? \ D +)? [] * ((?

https://regex101.com/r/PsJled/1

Ce regex lisible est

 ^ 
 \d* 
 (?: [ ]? \d+ [ ]? [&\/-] [ ]? \d+ )?
 [ ]* 
 (                             # (1 start)
      (?<! \S )
      [^\W\d] 
      [\w.]* 
      (?: [ ]+ \w+ )*
 )                             # (1 end)

Il y a aussi celui-ci plus lâche que vous pouvez essayer
https://regex101.com/r/xasb3S/1

p >


0 commentaires

0
votes

Qu'en est-il de (^ [\ s & / \ - 1-9] +) {0,1} (. *) puis ciblez le sous-groupe 2


0 commentaires