I am trying to write a regular expression for use in a Ruby program which matches legal case names in plain text.

I have come up with the following regular expression:

```
((([[:upper:]])+\s)?((([[:upper:]]+([[:lower:]])+)\s)+v\s((\b[[:upper:]]([[:lower:]])+)\s?)+(\(|\[)+\d+(\)|\])\s(\d+\s)?\w+\s(\w+)?(\s)?(\d+)?))

```

This almost does what I want but there are some edge cases where it fails to match. I need an expression which will match the following cases (including the citation at the end):

1. Seele Austria GmbH & Co v Tokyo Marine Europe Insurance Ltd [2009] EWHC 2066
2. Darlington Building Society v O'Rourke James Scourfield & McCarthy [1999] PNLR 365

The expression that I have written works on the basis that legal case titles will be a series of Title Case Words with a v in the middle. However, the ampersands in both of the above examples, together with the GmbH in example 1 are throwing things off and I only get a partial match (from Co v ... ) against 1. I get no match at all for 2.

If anyone can show me how to change my expression so as to match both the above examples, I'd appreciate it. The expression is also pretty unwieldy as it stands - maybe it can be simplified?