@ -48,6 +48,7 @@ grammar = {
' Expired \ s?[.]*:? \ s*?(?P<val>.+) ' ,
' Expired \ s?[.]*:? \ s*?(?P<val>.+) ' ,
' Domain Expiration Date \ s?[.]*:? \ s*?(?P<val>.+) ' ,
' Domain Expiration Date \ s?[.]*:? \ s*?(?P<val>.+) ' ,
' paid-till: \ s*(?P<val>.+) ' ,
' paid-till: \ s*(?P<val>.+) ' ,
' expiration_date: \ s*(?P<val>.+) ' ,
' renewal: \ s*(?P<val>.+) ' ,
' renewal: \ s*(?P<val>.+) ' ,
' expire: \ s*(?P<val>.+) ' ] ,
' expire: \ s*(?P<val>.+) ' ] ,
' updated_date ' : [ ' \ [Last Updated \ ] \ s*(?P<val>.+) ' ,
' updated_date ' : [ ' \ [Last Updated \ ] \ s*(?P<val>.+) ' ,
@ -66,6 +67,7 @@ grammar = {
' Record last updated \ s?[.]*: \ s?(?P<val>.+) ' ,
' Record last updated \ s?[.]*: \ s?(?P<val>.+) ' ,
' Modified \ s?[.]*: \ s?(?P<val>.+) ' ,
' Modified \ s?[.]*: \ s?(?P<val>.+) ' ,
' (C|c)hanged: \ s*(?P<val>.+) ' ,
' (C|c)hanged: \ s*(?P<val>.+) ' ,
' last_update: \ s*(?P<val>.+) ' ,
' Last Update \ s?[.]*: \ s?(?P<val>.+) ' ,
' Last Update \ s?[.]*: \ s?(?P<val>.+) ' ,
' Last updated on (?P<val>.+) [a-z] { 3,4} ' ,
' Last updated on (?P<val>.+) [a-z] { 3,4} ' ,
' Last updated: \ s*(?P<val>.+) ' ,
' Last updated: \ s*(?P<val>.+) ' ,
@ -480,6 +482,7 @@ def parse_registrants(data):
" Registrant: \n (?P<name>.+) \n \n Registrant type: \n .* \n \n Registrant ' s address: \n The registrant .* opted to have " , # Nominet (.uk) with hidden address
" Registrant: \n (?P<name>.+) \n \n Registrant type: \n .* \n \n Registrant ' s address: \n The registrant .* opted to have " , # Nominet (.uk) with hidden address
" Registrant: \n (?P<name>.+) \n \n Registrant type: \n .* \n \n Registrant ' s address: \n (?P<street1>.+) \n (?: (?P<street2>.+) \n )?(?: (?P<street3>.+) \n )? (?P<city>.+) \n (?P<state>.+) \n (?P<postalcode>.+) \n (?P<country>.+) " , # Nominet (.uk) with visible address
" Registrant: \n (?P<name>.+) \n \n Registrant type: \n .* \n \n Registrant ' s address: \n (?P<street1>.+) \n (?: (?P<street2>.+) \n )?(?: (?P<street3>.+) \n )? (?P<city>.+) \n (?P<state>.+) \n (?P<postalcode>.+) \n (?P<country>.+) " , # Nominet (.uk) with visible address
" Registrant contact: \n (?P<name>.+) \n (?P<street>.*) \n (?P<city>.+), (?P<state>.+) (?P<postalcode>.+) (?P<country>.+) \n \n " , # Fabulous.com
" Registrant contact: \n (?P<name>.+) \n (?P<street>.*) \n (?P<city>.+), (?P<state>.+) (?P<postalcode>.+) (?P<country>.+) \n \n " , # Fabulous.com
" registrant-name: \ s*(?P<name>.+) \n registrant-type: \ s*(?P<type>.+) \n registrant-address: \ s*(?P<street>.+) \n registrant-postcode: \ s*(?P<postalcode>.+) \n registrant-city: \ s*(?P<city>.+) \n registrant-country: \ s*(?P<country>.+) \n (?:registrant-phone: \ s*(?P<phone>.+) \n )?(?:registrant-email: \ s*(?P<email>.+) \n )? " , # Hetzner
" Registrant Contact Information :[ ]* \n [ ]+(?P<firstname>.*) \n [ ]+(?P<lastname>.*) \n [ ]+(?P<organization>.*) \n [ ]+(?P<email>.*) \n [ ]+(?P<street>.*) \n [ ]+(?P<city>.*) \n [ ]+(?P<postalcode>.*) \n [ ]+(?P<phone>.*) \n [ ]+(?P<fax>.*) \n \n " , # GAL Communication
" Registrant Contact Information :[ ]* \n [ ]+(?P<firstname>.*) \n [ ]+(?P<lastname>.*) \n [ ]+(?P<organization>.*) \n [ ]+(?P<email>.*) \n [ ]+(?P<street>.*) \n [ ]+(?P<city>.*) \n [ ]+(?P<postalcode>.*) \n [ ]+(?P<phone>.*) \n [ ]+(?P<fax>.*) \n \n " , # GAL Communication
" Contact Information : For Customer # [0-9]+[ ]* \n [ ]+(?P<firstname>.*) \n [ ]+(?P<lastname>.*) \n [ ]+(?P<organization>.*) \n [ ]+(?P<email>.*) \n [ ]+(?P<street>.*) \n [ ]+(?P<city>.*) \n [ ]+(?P<postalcode>.*) \n [ ]+(?P<phone>.*) \n [ ]+(?P<fax>.*) \n \n " , # GAL Communication alternative (private WHOIS) format?
" Contact Information : For Customer # [0-9]+[ ]* \n [ ]+(?P<firstname>.*) \n [ ]+(?P<lastname>.*) \n [ ]+(?P<organization>.*) \n [ ]+(?P<email>.*) \n [ ]+(?P<street>.*) \n [ ]+(?P<city>.*) \n [ ]+(?P<postalcode>.*) \n [ ]+(?P<phone>.*) \n [ ]+(?P<fax>.*) \n \n " , # GAL Communication alternative (private WHOIS) format?
" Registrant: \n (?P<name>.+) \n (?P<street>.+) \n (?P<city>.+) (?P<state> \ S+),[ ]+(?P<postalcode>.+) \n (?P<country>.+) " , # .am
" Registrant: \n (?P<name>.+) \n (?P<street>.+) \n (?P<city>.+) (?P<state> \ S+),[ ]+(?P<postalcode>.+) \n (?P<country>.+) " , # .am
@ -505,6 +508,7 @@ def parse_registrants(data):
" Technical Contact ID:[ ]*(?P<handle>.*) \n Technical Contact Name:[ ]*(?P<name>.*) \n (?:Technical Contact Organization:[ ]*(?P<organization>.*) \n )?Technical Contact Address1:[ ]*(?P<street1>.*) \n (?:Technical Contact Address2:[ ]*(?P<street2>.*) \n )?(?:Technical Contact Address3:[ ]*(?P<street3>.*) \n )?Technical Contact City:[ ]*(?P<city>.*) \n Technical Contact State/Province:[ ]*(?P<state>.*) \n Technical Contact Postal Code:[ ]*(?P<postalcode>.*) \n Technical Contact Country:[ ]*(?P<country>.*) \n Technical Contact Country Code:[ ]*.* \n Technical Contact Phone Number:[ ]*(?P<phone>.*) \n (?:Technical Contact Facsimile Number:[ ]*(?P<facsimile>.*) \n )?Technical Contact Email:[ ]*(?P<email>.*) " , # .US (NeuStar)
" Technical Contact ID:[ ]*(?P<handle>.*) \n Technical Contact Name:[ ]*(?P<name>.*) \n (?:Technical Contact Organization:[ ]*(?P<organization>.*) \n )?Technical Contact Address1:[ ]*(?P<street1>.*) \n (?:Technical Contact Address2:[ ]*(?P<street2>.*) \n )?(?:Technical Contact Address3:[ ]*(?P<street3>.*) \n )?Technical Contact City:[ ]*(?P<city>.*) \n Technical Contact State/Province:[ ]*(?P<state>.*) \n Technical Contact Postal Code:[ ]*(?P<postalcode>.*) \n Technical Contact Country:[ ]*(?P<country>.*) \n Technical Contact Country Code:[ ]*.* \n Technical Contact Phone Number:[ ]*(?P<phone>.*) \n (?:Technical Contact Facsimile Number:[ ]*(?P<facsimile>.*) \n )?Technical Contact Email:[ ]*(?P<email>.*) " , # .US (NeuStar)
" Tech Name[.]* (?P<name>.*) \n Tech Address[.]* (?P<street1>.*) \n Tech Address[.]* (?P<street2>.*) \n (?: Tech Address[.]* (?P<street3>.*) \n )? Tech Address[.]* (?P<city>.*) \n Tech Address[.]* (?P<postalcode>.*) \n Tech Address[.]* (?P<state>.*) \n Tech Address[.]* (?P<country>.*) \n Tech Email[.]* (?P<email>.*) \n Tech Phone[.]* (?P<phone>.*) \n Tech Fax[.]* (?P<fax>.*) " , # Melbourne IT
" Tech Name[.]* (?P<name>.*) \n Tech Address[.]* (?P<street1>.*) \n Tech Address[.]* (?P<street2>.*) \n (?: Tech Address[.]* (?P<street3>.*) \n )? Tech Address[.]* (?P<city>.*) \n Tech Address[.]* (?P<postalcode>.*) \n Tech Address[.]* (?P<state>.*) \n Tech Address[.]* (?P<country>.*) \n Tech Email[.]* (?P<email>.*) \n Tech Phone[.]* (?P<phone>.*) \n Tech Fax[.]* (?P<fax>.*) " , # Melbourne IT
" Technical contact: \n (?: (?P<organization>.+) \n )? (?P<name>.+) \n (?P<email>.+) \n (?P<street>.+) \n (?P<city>.+), (?P<state>.+) (?P<postalcode>.+) (?P<country>.+) \n Phone: (?P<phone>.*) \n Fax: (?P<fax>.*) \n " , # Fabulous.com
" Technical contact: \n (?: (?P<organization>.+) \n )? (?P<name>.+) \n (?P<email>.+) \n (?P<street>.+) \n (?P<city>.+), (?P<state>.+) (?P<postalcode>.+) (?P<country>.+) \n Phone: (?P<phone>.*) \n Fax: (?P<fax>.*) \n " , # Fabulous.com
" tech-c-name: \ s*(?P<name>.+) \n tech-c-type: \ s*(?P<type>.+) \n tech-c-address: \ s*(?P<street>.+) \n tech-c-postcode: \ s*(?P<postalcode>.+) \n tech-c-city: \ s*(?P<city>.+) \n tech-c-country: \ s*(?P<country>.+) \n (?:tech-c-phone: \ s*(?P<phone>.+) \n )?(?:tech-c-email: \ s*(?P<email>.+) \n )? " , # Hetzner
" Admin Contact Information :[ ]* \n [ ]+(?P<firstname>.*) \n [ ]+(?P<lastname>.*) \n [ ]+(?P<organization>.*) \n [ ]+(?P<email>.*) \n [ ]+(?P<street>.*) \n [ ]+(?P<city>.*) \n [ ]+(?P<postalcode>.*) \n [ ]+(?P<phone>.*) \n [ ]+(?P<fax>.*) \n \n " , # GAL Communication
" Admin Contact Information :[ ]* \n [ ]+(?P<firstname>.*) \n [ ]+(?P<lastname>.*) \n [ ]+(?P<organization>.*) \n [ ]+(?P<email>.*) \n [ ]+(?P<street>.*) \n [ ]+(?P<city>.*) \n [ ]+(?P<postalcode>.*) \n [ ]+(?P<phone>.*) \n [ ]+(?P<fax>.*) \n \n " , # GAL Communication
" Technical contact: \n (?P<name>.+) \n (?P<organization>.*) \n (?P<street>.+) \n (?P<city>.+) (?P<state> \ S+),[ ]+(?P<postalcode>.+) \n (?P<country>.+) \n (?P<email>.+) \n (?P<phone>.*) \n (?P<fax>.*) " , # .am
" Technical contact: \n (?P<name>.+) \n (?P<organization>.*) \n (?P<street>.+) \n (?P<city>.+) (?P<state> \ S+),[ ]+(?P<postalcode>.+) \n (?P<country>.+) \n (?P<email>.+) \n (?P<phone>.*) \n (?P<fax>.*) " , # .am
" \ [Zone-C \ ] \n Type: (?P<type>.+) \n Name: (?P<name>.+) \n (Organisation: (?P<organization>.+) \n ) { 0,1}(Address: (?P<street1>.+) \n ) {1} (Address: (?P<street2>.+) \n ) { 0,1}(Address: (?P<street3>.+) \n ) { 0,1}(Address: (?P<street4>.+) \n ) { 0,1}PostalCode: (?P<postalcode>.+) \n City: (?P<city>.+) \n CountryCode: (?P<country>[A-Za-z] {2} ) \n Phone: (?P<phone>.+) \n Fax: (?P<fax>.+) \n Email: (?P<email>.+) \n (Remarks: (?P<remark>.+) \n ) { 0,1}Changed: (?P<changed>.+) " , # DeNIC
" \ [Zone-C \ ] \n Type: (?P<type>.+) \n Name: (?P<name>.+) \n (Organisation: (?P<organization>.+) \n ) { 0,1}(Address: (?P<street1>.+) \n ) {1} (Address: (?P<street2>.+) \n ) { 0,1}(Address: (?P<street3>.+) \n ) { 0,1}(Address: (?P<street4>.+) \n ) { 0,1}PostalCode: (?P<postalcode>.+) \n City: (?P<city>.+) \n CountryCode: (?P<country>[A-Za-z] {2} ) \n Phone: (?P<phone>.+) \n Fax: (?P<fax>.+) \n Email: (?P<email>.+) \n (Remarks: (?P<remark>.+) \n ) { 0,1}Changed: (?P<changed>.+) " , # DeNIC
@ -525,6 +529,7 @@ def parse_registrants(data):
" Administrative Contact ID:[ ]*(?P<handle>.*) \n Administrative Contact Name:[ ]*(?P<name>.*) \n (?:Administrative Contact Organization:[ ]*(?P<organization>.*) \n )?Administrative Contact Address1:[ ]*(?P<street1>.*) \n (?:Administrative Contact Address2:[ ]*(?P<street2>.*) \n )?(?:Administrative Contact Address3:[ ]*(?P<street3>.*) \n )?Administrative Contact City:[ ]*(?P<city>.*) \n Administrative Contact State/Province:[ ]*(?P<state>.*) \n Administrative Contact Postal Code:[ ]*(?P<postalcode>.*) \n Administrative Contact Country:[ ]*(?P<country>.*) \n Administrative Contact Country Code:[ ]*.* \n Administrative Contact Phone Number:[ ]*(?P<phone>.*) \n (?:Administrative Contact Facsimile Number:[ ]*(?P<facsimile>.*) \n )?Administrative Contact Email:[ ]*(?P<email>.*) " , # .US (NeuStar)
" Administrative Contact ID:[ ]*(?P<handle>.*) \n Administrative Contact Name:[ ]*(?P<name>.*) \n (?:Administrative Contact Organization:[ ]*(?P<organization>.*) \n )?Administrative Contact Address1:[ ]*(?P<street1>.*) \n (?:Administrative Contact Address2:[ ]*(?P<street2>.*) \n )?(?:Administrative Contact Address3:[ ]*(?P<street3>.*) \n )?Administrative Contact City:[ ]*(?P<city>.*) \n Administrative Contact State/Province:[ ]*(?P<state>.*) \n Administrative Contact Postal Code:[ ]*(?P<postalcode>.*) \n Administrative Contact Country:[ ]*(?P<country>.*) \n Administrative Contact Country Code:[ ]*.* \n Administrative Contact Phone Number:[ ]*(?P<phone>.*) \n (?:Administrative Contact Facsimile Number:[ ]*(?P<facsimile>.*) \n )?Administrative Contact Email:[ ]*(?P<email>.*) " , # .US (NeuStar)
" Admin Name[.]* (?P<name>.*) \n Admin Address[.]* (?P<street1>.*) \n Admin Address[.]* (?P<street2>.*) \n (?: Admin Address[.]* (?P<street3>.*) \n )? Admin Address[.]* (?P<city>.*) \n Admin Address[.]* (?P<postalcode>.*) \n Admin Address[.]* (?P<state>.*) \n Admin Address[.]* (?P<country>.*) \n Admin Email[.]* (?P<email>.*) \n Admin Phone[.]* (?P<phone>.*) \n Admin Fax[.]* (?P<fax>.*) " , # Melbourne IT
" Admin Name[.]* (?P<name>.*) \n Admin Address[.]* (?P<street1>.*) \n Admin Address[.]* (?P<street2>.*) \n (?: Admin Address[.]* (?P<street3>.*) \n )? Admin Address[.]* (?P<city>.*) \n Admin Address[.]* (?P<postalcode>.*) \n Admin Address[.]* (?P<state>.*) \n Admin Address[.]* (?P<country>.*) \n Admin Email[.]* (?P<email>.*) \n Admin Phone[.]* (?P<phone>.*) \n Admin Fax[.]* (?P<fax>.*) " , # Melbourne IT
" Administrative contact: \n (?: (?P<organization>.+) \n )? (?P<name>.+) \n (?P<email>.+) \n (?P<street>.+) \n (?P<city>.+), (?P<state>.+) (?P<postalcode>.+) (?P<country>.+) \n Phone: (?P<phone>.*) \n Fax: (?P<fax>.*) \n " , # Fabulous.com
" Administrative contact: \n (?: (?P<organization>.+) \n )? (?P<name>.+) \n (?P<email>.+) \n (?P<street>.+) \n (?P<city>.+), (?P<state>.+) (?P<postalcode>.+) (?P<country>.+) \n Phone: (?P<phone>.*) \n Fax: (?P<fax>.*) \n " , # Fabulous.com
" admin-c-name: \ s*(?P<name>.+) \n admin-c-type: \ s*(?P<type>.+) \n admin-c-address: \ s*(?P<street>.+) \n admin-c-postcode: \ s*(?P<postalcode>.+) \n admin-c-city: \ s*(?P<city>.+) \n admin-c-country: \ s*(?P<country>.+) \n (?:admin-c-phone: \ s*(?P<phone>.+) \n )?(?:admin-c-email: \ s*(?P<email>.+) \n )? " , # Hetzner
" Tech Contact Information :[ ]* \n [ ]+(?P<firstname>.*) \n [ ]+(?P<lastname>.*) \n [ ]+(?P<organization>.*) \n [ ]+(?P<email>.*) \n [ ]+(?P<street>.*) \n [ ]+(?P<city>.*) \n [ ]+(?P<postalcode>.*) \n [ ]+(?P<phone>.*) \n [ ]+(?P<fax>.*) \n \n " , # GAL Communication
" Tech Contact Information :[ ]* \n [ ]+(?P<firstname>.*) \n [ ]+(?P<lastname>.*) \n [ ]+(?P<organization>.*) \n [ ]+(?P<email>.*) \n [ ]+(?P<street>.*) \n [ ]+(?P<city>.*) \n [ ]+(?P<postalcode>.*) \n [ ]+(?P<phone>.*) \n [ ]+(?P<fax>.*) \n \n " , # GAL Communication
" Administrative contact: \n (?P<name>.+) \n (?P<organization>.*) \n (?P<street>.+) \n (?P<city>.+) (?P<state> \ S+),[ ]+(?P<postalcode>.+) \n (?P<country>.+) \n (?P<email>.+) \n (?P<phone>.*) \n (?P<fax>.*) " , # .am
" Administrative contact: \n (?P<name>.+) \n (?P<organization>.*) \n (?P<street>.+) \n (?P<city>.+) (?P<state> \ S+),[ ]+(?P<postalcode>.+) \n (?P<country>.+) \n (?P<email>.+) \n (?P<phone>.*) \n (?P<fax>.*) " , # .am
" \ [Tech-C \ ] \n Type: (?P<type>.+) \n Name: (?P<name>.+) \n (Organisation: (?P<organization>.+) \n ) { 0,1}(Address: (?P<street1>.+) \n ) {1} (Address: (?P<street2>.+) \n ) { 0,1}(Address: (?P<street3>.+) \n ) { 0,1}(Address: (?P<street4>.+) \n ) { 0,1}PostalCode: (?P<postalcode>.+) \n City: (?P<city>.+) \n CountryCode: (?P<country>[A-Za-z] {2} ) \n Phone: (?P<phone>.+) \n Fax: (?P<fax>.+) \n Email: (?P<email>.+) \n (Remarks: (?P<remark>.+) \n ) { 0,1}Changed: (?P<changed>.+) " , # DeNIC
" \ [Tech-C \ ] \n Type: (?P<type>.+) \n Name: (?P<name>.+) \n (Organisation: (?P<organization>.+) \n ) { 0,1}(Address: (?P<street1>.+) \n ) {1} (Address: (?P<street2>.+) \n ) { 0,1}(Address: (?P<street3>.+) \n ) { 0,1}(Address: (?P<street4>.+) \n ) { 0,1}PostalCode: (?P<postalcode>.+) \n City: (?P<city>.+) \n CountryCode: (?P<country>[A-Za-z] {2} ) \n Phone: (?P<phone>.+) \n Fax: (?P<fax>.+) \n Email: (?P<email>.+) \n (Remarks: (?P<remark>.+) \n ) { 0,1}Changed: (?P<changed>.+) " , # DeNIC