diff --git a/lib/spack/spack/test/url_parse.py b/lib/spack/spack/test/url_parse.py
index 818903c90926a6100b6a55c2f1169a8fd2d67837..1131d2debc62b9ea4503e1ab6973d625cf23d426 100644
--- a/lib/spack/spack/test/url_parse.py
+++ b/lib/spack/spack/test/url_parse.py
@@ -331,3 +331,12 @@ def test_r_xml_version(self):
         self.check(
             'xml', '3.98-1.4',
             'https://cran.r-project.org/src/contrib/XML_3.98-1.4.tar.gz')
+
+    def test_nco_version(self):
+        self.check(
+            'nco', '4.6.2-beta03',
+            'https://github.com/nco/nco/archive/4.6.2-beta03.tar.gz')
+
+        self.check(
+            'nco', '4.6.3-alpha04',
+            'https://github.com/nco/nco/archive/4.6.3-alpha04.tar.gz')
diff --git a/lib/spack/spack/url.py b/lib/spack/spack/url.py
index d377a88bcc8e97a35b44817186d5b5cb229a2cc5..6921770f6c1dce6f7955f7c57c1a3094fcbe23bf 100644
--- a/lib/spack/spack/url.py
+++ b/lib/spack/spack/url.py
@@ -189,7 +189,7 @@ def parse_version_offset(path, debug=False):
         (r'github.com/.+/(?:zip|tar)ball/v?((\d+\.)+\d+_(\d+))$', path),
 
         # e.g. https://github.com/hpc/lwgrp/archive/v1.0.1.tar.gz
-        (r'github.com/[^/]+/[^/]+/archive/v?(\d+(?:\.\d+)*)$', path),
+        (r'github.com/[^/]+/[^/]+/archive/v?(\w+(?:[.-]\w+)*)$', path),
 
         # e.g. https://github.com/erlang/otp/tarball/OTP_R15B01 (erlang style)
         (r'[-_](R\d+[AB]\d*(-\d+)?)', path),