diff --git a/metar/Metar.py b/metar/Metar.py
index 5ef2d76..e5d113d 100644
--- a/metar/Metar.py
+++ b/metar/Metar.py
@@ -109,12 +109,13 @@ COLOR_RE = re.compile(
     re.VERBOSE,
 )
 RUNWAYSTATE_RE = re.compile(
-    r"""((?P<name>\d\d) | R(?P<namenew>\d\d)(RR?|LL?|C)?/?)
+    r"""((?P<snoclo>R/SNOCLO) |
+        ((?P<name>\d\d) | R(?P<namenew>\d\d)(RR?|LL?|C)?/?)
         ((?P<special> SNOCLO|CLRD(\d\d|//)) |
         (?P<deposit>(\d|/))
         (?P<extent>(\d|/))
         (?P<depth>(\d\d|//))
-        (?P<friction>(\d\d|//)))\s+""",
+        (?P<friction>(\d\d|//))))\s+""",
     re.VERBOSE,
 )
 TREND_RE = re.compile(r"^(?P<trend>TEMPO|BECMG|FCST|NOSIG)\s+")

diff --git a/test/test_metar.py b/test/test_metar.py
index 00bd05f..d6818a1 100644
--- a/test/test_metar.py
+++ b/test/test_metar.py
@@ -556,6 +556,11 @@ def test_290_ranway_state():
     assert report("09SNOCLO").remarks() == ""
     assert report("09CLRD//").remarks() == ""
 
+    assert report("R/SNOCLO").remarks() == ""
+    assert report("R09/CLRD//").remarks() == ""
+
+    assert report("R01R/SNOCLO ").remarks() == ""
+
 
 def test_300_parseTrend():
     """Check parsing of trend forecasts."""

Unparsed groups in body 'R/SNOCLO'
The [Manual on Codes](https://library.wmo.int/doc_num.php?explnum_id=10235) states

> The state of the runway group shall be replaced by the abbreviation R/SNOCLO when the aerodrome is closed due to extreme deposit of snow. 

Note that there is no runway designator, just the letter "R". However, the runway state regex for parsing the record requires a runway number. This leads to the mentioned error.

Test record:
> METAR EDDC 032220Z 31005KT 5000 -SN BKN008 M01/M01 Q1020 R/SNOCLO 
test/test_metar.py::test_290_ranway_state
test/test_metar.py::test_xlate_loc test/test_metar.py::test_module test/test_metar.py::test_issue114_multiplebecominggroups test/test_metar.py::test_issue84_trimequals[] test/test_metar.py::test_issue84_trimequals[=] test/test_metar.py::test_issue84_trimequals[= test/test_metar.py::test_issue77_ice_accretion[1] test/test_metar.py::test_issue77_ice_accretion[3] test/test_metar.py::test_issue77_ice_accretion[6] test/test_metar.py::test_issue64_cloudkeyerror test/test_metar.py::test_issue67_precip_text test/test_metar.py::test_issue40_runwayunits test/test_metar.py::test_issue107_runwayunits test/test_metar.py::test_issue26_runway_slashes[R28L/////] test/test_metar.py::test_issue26_runway_slashes[R28L/////FT] test/test_metar.py::test_issue26_runway_slashes[R28L//////] test/test_metar.py::test_issue26_runway_slashes[R28L/////N] test/test_metar.py::test_010_parseType_default test/test_metar.py::test_011_parseType_legal test/test_metar.py::test_020_parseStation_legal test/test_metar.py::test_021_parseStation_illegal test/test_metar.py::test_030_parseTime_legal test/test_metar.py::test_031_parseTime_specify_year test/test_metar.py::test_032_parseTime_specify_month test/test_metar.py::test_033_parseTime_auto_month test/test_metar.py::test_034_parseTime_auto_year test/test_metar.py::test_035_parseTime_suppress_auto_month test/test_metar.py::test_040_parseModifier_default test/test_metar.py::test_041_parseModifier test/test_metar.py::test_042_parseModifier_nonstd test/test_metar.py::test_043_parseModifier_illegal test/test_metar.py::test_140_parseWind test/test_metar.py::test_141_parseWind_nonstd test/test_metar.py::test_issue139_no_wind_unit test/test_metar.py::test_issue51_strict test/test_metar.py::test_142_parseWind_illegal test/test_metar.py::test_150_parseVisibility test/test_metar.py::test_151_parseVisibility_direction test/test_metar.py::test_152_parseVisibility_with_following_temperature test/test_metar.py::test_300_parseTrend test/test_metar.py::test_snowdepth test/test_metar.py::test_310_parse_sky_conditions test/test_metar.py::test_not_strict_mode test/test_metar.py::test_cor_auto_mod test/test_metar.py::test_slp_outside_remarks test/test_metar.py::test_wind_after_sky test/test_metar.py::test_issue136_temperature test/test_metar.py::test_windshear_runway_identifier