re = /^(?:(?P<name>[\p{L}\.\ ]+)\n)?
(?:(?P<co>[\p{L}\.\ \/]+)\n)?
(?P<street>[\p{L}\ \p{N}’\.]+)\n
(?:(?<city>[\p{L}\ ]+)\n)?
(?P<postal_code>[\p{N}\ ]+)\ (?P<postal_city>[\p{L}\ ]+)(?:\((?<province>[\p{L}\ ]+)\))?\n
(?P<country>[\p{L}\ ]+)?
$/mx
str = 'Herr Franz Huber
Beethovenstrasse 12
1010 WIEN
AUSTRIA
Mr Willy Janssens
Lange Stationsstraat 352
3000 LEUVEN
BELGIUM
M. Emile Dubois
Rue du Diamant 215
4800 VERVIERS
BELGIUM
Mr Thor Nielsen
Tietgensgade 137
8800 VIBORG
DENMARK
Mr Torben Raldorf
PO Box 100
COPENHAGEN
1004 VIBORG
DENMARK
Peter Mogensen
c/o Fictional Company
Niels Bohrs Alle 23
Dalum
5230 Odense M
Danmark
Mr Asko Teirila
PO Box 511
39140 AKDENMAA
FINLAND
M. Robert MARIN
Rue de l’Eglise
Dunes
82340 AUVILLAR
FRANCE
Mme Marie PAGE
23 Rue de Grenell
75700 PARIS CEDEX
FRANCE
Mrs F Meier
Weberstr. 2
53113 BONNN
GERMANY
Mr P Kunde
Lange Str. 12
04103 LEIPZIG
GERMANY
Mr George Latsis
Alkamenou 37
117 80 ATHENS
GREECE
Mr Jon Jonsson
Einimel 80
107 REYKJAVIK
ICELAND
Sig. Giovanni Masci
via Garibaldi 27
47037 RIMINI RN
ITALY
M. Jaques Muller
71 route de Longway
4750 PETANGE
LUXEMBOURG
Mr J van Dieten
Morsstr 111
2312 BK LEIDEN
THE NETHERLANDS
(There should be a double space between the postcode and the post town)
Herr Hans Hansen
Svingen 22
9230 BEKKEHAUG
NORWAY
Senhor Carlos Manuel Pereira
Av das A’Augsa Livres
Monte Trigo
7220 PORTEL
PORTUGAL
Rosalina Silva
R Conde Redondo 80
1192 LISBOA CODEX
PORTUGAL
Sra Ana Jimenez
Mimbreras 4A
03201 ELCHE (Alicante)
SPAIN
(The province should be included in brackets after the town)
Fru Inger Lilja
Vasavagen 3 4tr
582 20 LINKOPING
SWEDEN
M. Andre Perret
Schanzenstrasse 7
3030 BERNE
SWITZERLAND'
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html