Avatar
Michaal.K
Člen
Avatar
Michaal.K:

Ahoj,
chtěl jsem se zeptat jak by vypadal regulární výraz pro číslo od 1-99. Potřebuji zjistit zda řetězec s nějakým textem obsahuje číslo od 1-99.
Díky za pomoc

 
Odpovědět 8. dubna 14:03
Avatar
Posix
Člen
Avatar
Odpovídá na Michaal.K
Posix:
[1-9][0-9]?
Editováno 8. dubna 22:53
Nahoru Odpovědět 8. dubna 22:52
Proč to dělat jednoduše, když to jde složitě.
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Posix
Michaal.K:

Ahoj,
tak jsem vyzkoušel výraz, ale když je číslo větší než 99 tak ho stejně vyhledá. Ještě jsem se chtěl zeptat zda by nějak šlo, že pokud zadaný řetězec obsahuje číslo od 1 do 99 tak mi to číslo z řetězce přeuloží do proměnné? Díky moc...

 
Nahoru Odpovědět 11. dubna 7:00
Avatar
Michal Žůrek (misaz):

Posix začal dobře, ale neošetří mu to víceznaková čísla. 123 je pole jeho výrazu validní.

^[1-9][0-9]?$
Nahoru Odpovědět 11. dubna 8:42
Nesnáším {}, proto se jim vyhýbám.
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
Michaal.K:

Ahoj, díky za radu teď už to funguje pro čísla od 1 do 99. Ale ještě se mi vyskytl jeden problém, když zadám řetězec: data = "test15", tak mi tohodí že tam číslo není. Kód vypadá takto:

Regex regex = new Regex(@"^[1-9][0-9]?$");
Match match = regex.Match(data);
if (match.Success)
{
        // retezec obsahuje cislo
}
else
{
        // retezec neobsahuje cislo
}
 
Nahoru Odpovědět 11. dubna 9:35
Avatar
Posix
Člen
Avatar
Odpovídá na Michaal.K
Posix:

protože tam máš ^ a $
takže celé by to mohlo vypadat tak nějak

(?<![0-9])[1-9][0-9]?(?![0-9])

(?<![0-9]) kontroluje, že před číslem 1-99 nesmí být žadné jiné číslo
(?![0-9]) kontroluje, že za číslem 1-99 nesmí být žadné jiné číslo

Editováno 11. dubna 14:52
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 11. dubna 14:50
Proč to dělat jednoduše, když to jde složitě.
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Posix
Michaal.K:

Díky moc teď už to funguje správně. Ještě jsem se chtěl zeptat, když uživatel zadá řetězec: data = "test15", tak mi to hodí, že číslo od 1-99 zadaný řetězec obsahuje a já bych z toho řetězce to číslo potřeboval dostat a uložit do int.
Díky...

 
Nahoru Odpovědět 12. dubna 8:17
Avatar
Odpovídá na Michaal.K
Michal Štěpánek:

Musíš si zjistit, na jaké pozici v tom stringu je číslo a pak si ho můžeš... třeba uložit 8-)

Nahoru Odpovědět 12. dubna 10:19
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Posix
Člen
Avatar
Odpovídá na Michaal.K
Posix:

Poté, co zjistíš, že je tam tedy to číslo, tak ho získáš takto:

match.Groups[0].Value;

Dostaneš řetězec, takže ho pak ještě převeď na číslo.

Nahoru Odpovědět  +1 12. dubna 11:29
Proč to dělat jednoduše, když to jde složitě.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Michaal.K
Petr Nymsa:
string str = "te185st";
          int number = 0;
          for(int i = 0; i < str.Length; i++)
          {
              if (str[i] >= '0' && str[i] <= '9') {
                  number *= 10;
                  number += (str[i] - '0');
              }
          }
Nahoru Odpovědět 12. dubna 11:39
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Michaal.K
Člen
Avatar
Odpovídá na Posix
Michaal.K:

Super už to funguje... Díky moc

 
Nahoru Odpovědět 12. dubna 15:28
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.