Powiem to od razu: Jestem okropny w wyrażeniach regularnych. Próbowałem wymyślić taki, który rozwiązałby mój problem, ale naprawdę niewiele o nich wiem. . .Wyrażenie regularne pasujące do wymiarów obiektu
Wyobraźmy sobie kilka zdań wzdłuż następujących linii:
- Witam bla bla. Ma około 11 1/2 "x 32".
- Wymiary to 8 x 10-3/5!
- Prawdopodobnie gdzieś w regionie 22 "x 17".
- Rolka jest dość duży: 42 1/2" ... X 60 km
- Wszystkie są 5.76 przez 8 klatek
- Tak, może to jest około 84cm długości
- myślę o 13/19" .
- Nie, to prawdopodobnie 86 cm.
Chcę, tak czysto jak to możliwe, wydobyć wymiary przedmiotu z tych zdań. W idealnym świecie wyrażenie regularne że wyjście następuje:
- 11 1/2" x 32"
- 8 x 10-3/5
- 22" x 17"
- 42 1/2" x 60 km
- 5,76 o 8
- 84cm
- 13/19"
- 86 cm
sobie wyobrazić świat, w którym stosuje się następujące zasady:
- ważne są następujące jednostki:
{cm, mm, yd, yards, ", ', feet}
, choć wolałbym rozwiązanie, które uzna za dowolny zbiór jednostek zamiast jawne rozwiązanie dla powyższych jednostek. - Wymiar jest zawsze opisywany numerycznie, może mieć lub nie może mieć jednostek za nim i może lub nie może mieć części ułamkowej lub dziesiętnej. Składanie części ułamkowej na własnej jest dozwolone, np.
4/5"
. - Części ułamkowe zawsze mają
/
oddzielając licznik/mianownik, i można założyć, że między częściami nie ma spacji (choć jeśli ktoś to weźmie pod uwagę, to świetnie!). - Wymiary mogą być jednowymiarowe lub dwuwymiarowe, w którym to przypadku można przyjąć, że akceptowalne są następujące dwa wymiary:
{x, by}
. Jeśli wymiar jest tylko jednowymiarowy, musi on mieć jednostki z powyższego zestawu, to jest22 cm
jest OK,.333
nie jest, ani nie jest4.33 oz
.
Aby pokazać, jak bezużyteczna jestem przy użyciu wyrażeń regularnych (i pokazać, że przynajmniej próbowałem!), Dotarłem tak daleko. . .
[1-9]+[/ ][x1-9]
Aktualizacja (2)
Jesteście bardzo szybko i sprawnie! Mam zamiar dodać kilka dodatkowych przypadków testowych, które nie zostały objęte wyrażeń regularnych poniżej:
- Przedostatni sprawdzian jest 12 km x.
- Ostatni przypadek testowy wynosi 99 cm.
- Zdanie to nie ma wymiarów: 342/5553/222.
- Trzy wymiary? 22 "x 17" x 12 cm
- To jest kod produktu: c720 o innym numerze 83 x lepiej.
- Liczba sama w sobie 21.
- Objętość nie powinna odpowiadać 0,332 oz.
Powinno to następujący (# oznacza nic powinna odpowiadać):
- 12 km
- 99 cm
- #
- 22" x 17" x 12 cm
- #
- #
- #
Mam dostosowany M42's odpowiedź poniżej, aby:
\d+(?:\.\d+)?[\s-]*(?:\d+)?(?:\/\d+)?(?:cm|mm|yd|"|'|feet)(?:\s*x\s*|\s*by\s*)?(?:\d+(?:\.\d+)?[\s*-]*(?:\d+(?:\/\d+)?)?(?:cm|mm|yd|"|'|feet)?)?
Ale podczas gdy rozwiązuje kilka nowych przypadków testowych, to teraz nie pasują następujące innych.przedstawia on:
- 11 1/2" x 32" PASS
- (nic) nie
- 22" x 17" PASS
- 42 1/2" x 60 km PASS
- (nic) nie
- 84cm PASS
- 13/19" PASS
- 86 cm PASS
- 22" PASS
- (nic) nie
(nic) nie
12 YD x FAIL
- 99 cm na FAIL
- 22" x 17" [a także, ale oddzielnie '12 cm '] FAIL
PASS
PASS
Coud Pan podać ciągi wejściowe i jaki jest spodziewany ouput? – Toto
Pewnie. Dostarczyłem je w łatwiejszym formacie dla ciebie tutaj: http://pastebin.com/txfJs8LX Dziękuję bardzo! – Edwardr