Szukasz ciągu regex, który pozwoli mi znaleźć najbardziej prawą (jeśli istnieje) grupa cyfr osadzonych w ciągu znaków. Dbamy tylko o ciągłe cyfry. Nie dbamy o znak, przecinki, miejsca dziesiętne itp. Te, jeśli zostały znalezione, powinny być po prostu traktowane jako nie będące cyframi, tak jak list.Jaki łańcuch RegEx znajdzie ostatnią (najbardziej prawą) grupę cyfr w ciągu znaków?
Ma to na celu wymianę/inkrementację, więc musimy również pobrać wszystkie elementy przed i po wykrytym numerze, abyśmy mogli odtworzyć ciąg po zwiększeniu wartości, więc potrzebujemy tokenizowanego wyrażenia regularnego.
Oto przykłady czego szukasz:
- "abc123def456ghi" powinna identyfikować the'456'
- "abc123def456ghi789jkl" powinna identyfikować the'789'
- "abc123def" należy zidentyfikować” 123'
- "123ghi" powinna identyfikować the'123'
- "abc123,456ghi" powinna identyfikować the'456'
- "abc-654def" powinien ide ntify the'654'
- «abcdef» nie powinien powrócić żadnego meczu
Jako przykład tego, co chcemy, to byłoby coś jak wychodząc z nazwą «4-1a Item», wydobywania się z "1" ze wszystkim, zanim będzie prefiksem i wszystko po tym, jak będzie sufiks. Następnie za pomocą tego możemy wygenerować wartości "Pozycja 4-2a", "Pozycja 4-3a" i "Pozycja 4-4a" w pętli kodu.
Teraz, gdy szukałem pierwszego zestawu, byłoby to łatwe. Właśnie znajdę pierwszy ciągły blok 0 lub więcej nie-cyfr dla prefiksu, a następnie blok 1 lub więcej ciągłych cyfr dla liczby, a następnie wszystko inne na końcu będzie sufiksem.
Problem, który mam, to zdefiniowanie prefiksu jako zawierającego wszystkie liczby (jeśli występują) z wyjątkiem ostatniego zestawu. Wszystko, co próbuję dla tego prefiksu, ciągle połyka ten ostatni zestaw, nawet gdy próbowałem go zakotwiczyć do końca, zasadniczo odwracając powyższe.
Można [SPLIT] (http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.split.aspx) przy użyciu regex dostarczone przez @Birei i zaktualizować drugi indeks przed konkatenacją, aby uzyskać pożądany wynik. –
Jak możesz podzielić? Co jeśli ciąg znaków to a44b44c? Prefiks powinien brzmieć "a44b" i jeśli mam zamiar wprowadzić zbyt wiele ręcznych manipulacji, to pokonuje to za pomocą wyrażenia regularnego, które obsługuje już tokeny nazwane. – MarqueIV
Przez podział miałem na myśli (Regex.Split) [http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.split.aspx], stąd hiperłącze w poprzednim komentarzu. Zastosowanie 'Regex.Split()' z daje 3 tokeny dla 'a44b44c' viz. 'a44b',' 44' i 'c'. –