文字列を1つの正規表現と一致させようとはしません。以下を考慮する。
コード
R1 =/
\s+v\s+ # match 'v' preceded by >= 1 spaces and followed by >= 1 spaces
| # or
\s+\[ # match a left bracket preceded by >=1 spaces
| # or
\]\s+ # match a right bracket followed by >=1 spaces
/x # free-spacing regex definition mode
def legal_case_name?(str)
party1, party2, year, id = str.split R1
valid_party?(party1) && valid_party?(party2) && valid_year?(year) && valid_id?(id)
end
def valid_party?(party)
return false if party.nil?
party.split.all? { |word| word == '&' || word =~ /\A[[:alpha:]]+\z/ }
end
def valid_year?(year)
return false unless year =~ /\A\d{4}\z/
(1950..2040).cover? year.to_i
end
R2 =/
EWHC\s+\d{4} # match 'EWHC' followed by >= 1 spaces and then 4 digits
| # or
PNLR\s+\d{3} # match 'PNLR' followed by >= 1 spaces and then 3 digits
| # or
ABC\s+\d{5} # match 'ABC' followed by >= 1 spaces and then 5 digits
/x # free-spacing regex definition mode
def valid_id?(id)
(id =~ R2) ? true : false
end
これらの方法のいくつかは、おそらく要件を反映するように変更する必要があります。
例次に
legal_case_name? "Seele GmbH & Co v Tokyo Insurance Ltd [2009] EWHC 2066"
#=> true
legal_case_name? "Darlington Soc v Scourfield & McCarthy [1999] PNLR 365"
#=> true
legal_case_name? "Darlington Soc vs Scourfield & McCarthy [1999] PNLR 365"
#=> false
legal_case_name? "Darlington Soc v Scourfield & McCarthy [1921] PNLR 365"
#=> false
legal_case_name? "Darlington Soc v Scourfield & McCarthy [1921] PNLR 3652"
#=> false
説明
と仮定
str = "Seele GmbH & Co v Tokyo Insurance Ltd [2009] EWHC 2066"
party1, party2, year, id = str.split R1
#=> ["Seele GmbH & Co", "Tokyo Insurance Ltd", "2009", "EWHC 2066"]
party1
#=> "Seele GmbH & Co"
party2
#=> "Tokyo Insurance Ltd"
year
#=> "2009"
id
#=> "EWHC 2066"
valid_party?(party1)
#=> true
valid_party?(party2)
#=> true
valid_year?(year)
#=> true
valid_id?(id)
#=> true
は「GmbH」は正しいですか? –
それはLLCのようですが、ドイツ語です。それは[Gesellschaft mitbeschränkterHaftung]の略です(https://en.wikipedia.org/wiki/Gesellschaft_mit_beschr%C3%A4nkter_Haftung) – davidhu2000