Through sub,
> x <- "70 - 3/31/2014 - [email protected]"
> sub("^[^-]*-[^-]*-\\s*([^@]*)@.*", "\\1", x)
[1] "60"
> sub("^[^-]*-[^-]*-([^@]*)@.*", "\\1", x)
[1] " 60"
> sub("^(?:[^-]*-){2}\\s*([^@]*)@.*", "\\1", x)
[1] "60"
^ - Asserts that we are at the start.
[^-]*- Matches all the characters but not of -, zero or more times and the following hyphen.
(?:[^-]*-){2} - And the above pattern would be repeated exactly two times. So we end up with the second hyphen.
\\s* - Matches zero or more space characters.
([^@]*) - Captures any character but not of @ zero or more times.
.* - Matches all the remaining characters.
So by replacing all the matched chars with the chars inside group index 1 will gave you the desired output.
OR
> x <- "70 - 3/31/2014 - [email protected]"
> m <- regexpr("^(?:[^-]*-){2}\\s*\\K[^@]*(?=@)", x, perl=TRUE)
> regmatches(x, m)
[1] "60"
\K keeps the text matched so far out of the overall regex match.