W ogóle nie używałem wyrażeń regularnych, więc mam problemy z rozwiązywaniem problemów. Chcę, aby wyrażenie regularne pasowało tylko wtedy, gdy zawarty ciąg zawiera wszystkie liczby; ale w dwóch poniższych przykładach dopasowuje ciąg zawierający wszystkie liczby plus znak równości, taki jak „1234 = 4321”. Jestem pewien, że istnieje sposób na zmianę tego zachowania, ale jak powiedziałem, nigdy tak naprawdę niewiele zrobiłem z wyrażeniami regularnymi.
string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");
if (regex.IsMatch(compare))
{
//true
}
regex = new Regex("[0-9]");
if (regex.IsMatch(compare))
{
//true
}
W razie potrzeby używam C # i .NET2.0.
Odpowiedzi:
Użyj początkowej i końcowej kotwicy.
Użyj,
"^\d+$"
jeśli chcesz dopasować więcej niż jedną cyfrę.Pamiętaj, że
"\d"
będą pasować[0-9]
i inne cyfry, takie jak cyfry wschodniego języka arabskiego٠١٢٣٤٥٦٧٨٩
. Użyj,"^[0-9]+$"
aby ograniczyć dopasowania tylko do cyfr arabskich 0–9.Jeśli trzeba zawierać żadnych oświadczeń numerycznych inne niż tylko cyfr (takich jak wartości dziesiętnych dla początkujących), a następnie zobaczyć @tchrist „s obszerny przewodnik do analizowania liczb z wyrażeń regularnych .
źródło
"^\d{6}$"
. W niektórych innych krajach obowiązują bardziej skomplikowane reguły dotyczące kodów pocztowych, więc rozwiązania wyrażeń regularnych dla wielu krajów również mogą się skomplikować. Sprawdź niektóre przykłady na stackoverflow.com/q/578406/1288Twoje wyrażenie regularne pasuje do wszystkiego, co zawiera liczbę, chcesz użyć kotwic, aby dopasować cały ciąg, a następnie dopasować jedną lub więcej liczb:
^
Będzie zakotwiczyć początku napis, to$
będzie zakotwiczyć koniec łańcucha i+
będzie pasował do jednego lub więcej z tego, co go poprzedza (numer w tym przypadku).źródło
Jeśli chcesz tolerować przecinek dziesiętny i tysiąc znaczników
Będziesz potrzebował „-”, jeśli liczba może być ujemna.
źródło
-
) i kropki (.
) więcej niż jeden raz.-
i.
opcjonalnie za pośrednictwem?
.-?\d+(?:\.\d+)?
będą pasować do liczb całkowitych lub dziesiętnych. (?:
Parens po prostu sprawia, że^-?[0-9][0-9,\.]*$
uniknąć niepowodzenia w przypadku podstawowym. + zastępuje się *Pasuje, ponieważ znajduje „dopasowanie”, a nie dopasowanie pełnego łańcucha. Możesz to naprawić, zmieniając wyrażenie regularne tak, aby konkretnie szukało początku i końca łańcucha.
źródło
Być może moja metoda ci pomoże.
źródło
Char.IsDigit
zwraca totrue
dowolny znak należący do kategorii UnicodeCategory.DecimalDigitNumber . Być może nie tego chce OP. Zobacz także: Dlaczego Char.IsDigit zwraca true dla znaków, których nie można przeanalizować na int? .Działa to z liczbami całkowitymi i dziesiętnymi. Nie pasuje, jeśli liczba ma separator tysięcy śpiączki,
niektóre ciągi pasujące do tego:
niektóre ciągi, które nie:
źródło
^ \ d + $, czyli „początek ciągu”, „1 lub więcej cyfr”, „koniec ciągu” w języku angielskim.
źródło
Jeśli chcesz sprawdzić, czy wszystkie cyfry są cyframi (0–9), czy nie,
1425 PRAWDA
0142 PRAWDA
0 PRAWDA
1 PRAWDA
154a25 FAŁSZ
1234 = 3254 FAŁSZ
źródło
Oto mój działający:
I kilka testów
Pozytywne testy:
Testy negatywne:
Sprawdzone nie tylko w języku C #, ale także w Javie, JavaScript i PHP
źródło
Przepraszamy za brzydkie formatowanie. Dla dowolnej liczby cyfr:
Dla jednej lub więcej cyfr:
źródło
Chociaż żadne z powyższych rozwiązań nie pasowało do mojego celu, działało to dla mnie.
Przykład prawidłowych wartości: „3”, „-3”, „0”, „0,0”, „1,0”, „0,7”, „690,7”, „0,0001”, „-555”, „945465464654”
Przykład niepoprawnych wartości: „a”, „”, „”, „.”, „-”, „001”, „00.2”, „000.5”, „.3”, „3.”, „-1” , „--1”, „-.1”, „-0”, „00099”, „099”
źródło
Inny sposób: jeśli chcesz dopasować numery międzynarodowe, takie jak perski lub arabski, możesz użyć następującego wyrażenia:
Aby dopasować znak literału, użyj:
źródło
użyj początkowej i końcowej kotwicy.
źródło
Regex dla liczb całkowitych i zmiennoprzecinkowych:
Liczba może zaczynać się od kropki (bez wiodących cyfr), a liczba może kończyć się kropką (bez końcowych cyfr). Powyżej wyrażenia regularnego rozpoznają oba jako poprawne liczby.
A (kropka) sam bez cyfr nie jest poprawną liczbą. Dlatego potrzebujemy tam dwóch części wyrażenia regularnego (oddzielonych znakiem „|”).
Mam nadzieję że to pomoże.
źródło
Myślę, że ten jest najprostszy i akceptuje europejski i amerykański sposób pisania liczb, np. USA 10 555,12 europejski 10,555,12 Również ten nie dopuszcza kilku przecinków ani kropek jeden po drugim, np. 10..22 lub 10, .22 Oprócz tych liczb, takich jak .55 lub, 55 przejdzie. To może się przydać.
źródło
Jeśli chcesz wyodrębnić tylko liczby z łańcucha, wzór „\ d +” powinien pomóc.
źródło
Regex regex = new Regex („^ [0-9] {1,4} = [0-9] {1,4] $”)
źródło