Bylejaka kolejność w wyrażeniach regularnych

Bylejaka kolejność w wyrażeniach regularnych
XI
  • Rejestracja:około 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

Jak w wyrażeniach regularnych zapisać że jakieś grupy mają być w byle jakiej kolejnośni ?

np:
''x=\d+
y=\d+''

by dało się też tak:
''y=\d+
x=\d+''

edytowany 1x, ostatnio: Xix
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:9 minut
0

więcej konkretów.
IMO to jest jeden z tych przypadków, gdzie nie powinno się stosować wyrażeń regularnych.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Zobacz pozostałe 2 komentarze
MarekR22
"In my opinion"
XI
@hipekk a skąd ja mam wiedzieć ? W moim środowisku nikt po angielsku nie mówi oprucz mijego przyszywanego dziadka z australii :)
MarekR22
jest jeszcze google!
HI
A stąd, że to zwrot bardzo często wplatany do wypowiedzi na forach. "oprucz" (sprawdź jak to się pisze, bo oczy bolą...) IMO jest jeszcze na przykład: BTW - zobacz co to znaczy zawczasu :D
LukeJL
tu można zastosować regexpy jak najbardziej, ale nie w całym dokumencie, tylko na pojedynczych liniach
spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 dni
0

http://ideone.com/RfgFn4

Kopiuj
import re
import sys
p = re.compile(r"(\w+)\s*=\s*(\d+)")
matches = p.findall(sys.stdin.read())
print('\n'.join(str(x) for x in matches))
In Out
Kopiuj
x=6 y=7 
zimabwe=123

|

Kopiuj
('x', '6')
('y', '7')
('zimabwe', '123')
edytowany 12x, ostatnio: spartanPAGE
XI
nie mam pojęcie o co ci chodzi
spartanPAGE
@Xix to jest przykład użycia wyrażenia regularnego, które rozwiązuje twój problem.
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:9 minut
0

Dobra to teraz kilka pytań co do samych danych:

  1. czy ten format danych masz sztywno dany z zewnątrz? Czy może wybór formaty leży w twojej gestii? Jeśli masz swobodę wyboru to polecam format JSON. Python załatwi JSONa bez najmniejszych kłopotów, bez względu jak bardzo będzie to zakręcone.
  2. jeśli jednak te dane masz sztywno, to co co może być po prawej stronie przypisania? Dokładnie opisz jaki masz format danych.

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22
XI
  • Rejestracja:około 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

Chyba strasznie skomplikowaliście. Niech to będzie zwykły *.txt ze wzorem np x=.*/ny=.* i jak zmienić żeby było zamiennie. W XSD można było mieć xs:sequence czyli w normalmej kolejności xs:choice czyli jeden z elementów i xs:all czyli elementy w dowolnej kolejności.
Jak napiseć taki wzór by było kilka grup i by mogły wystąpić tylko raz ale w dowolnej kolejości ?

edytowany 2x, ostatnio: Xix
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:2 minuty
  • Postów:8423
1

Nie rozumiem. Nie możesz prostu przejść przez każdą linijkę i zastosować ogólnego wyrażenia regularnego w stylu(\w+) *= *(\d+)?
A później zapisywać dane do jakiejś tablicy/mapy? (gdzie $1 byłaby nazwa zmiennej, a $2 przypisywana wartość)

Wyrażeń regularnych nie musisz stosować do całego dokumentu naraz (co jak widać nie zawsze się udaje), możesz połączyć iterację po linijkach/tokenach etc. z regexpami. Wtedy nie musi wiązać cię kolejność danych złapanych wyrażeń.


edytowany 2x, ostatnio: LukeJL
XI
  • Rejestracja:około 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

@LukeJL A jak by te Itemy się różniły ? NP gdyby to była składnia języka ?
Wyobraż sobie składnię tworzenia klasy...
IMO to jest bardzo ważne.

Po prostu nie chcę się z tym męczyć.

edytowany 2x, ostatnio: Xix
XI
  • Rejestracja:około 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

No to się da czy nie ? @LukeJL @Shalom

edytowany 1x, ostatnio: Xix
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:2 minuty
  • Postów:8423
0

A co chcesz zrobić tak ogólnie? Jaki problem próbujesz rozwiązać? Nie napisałeś szerszego kontekstu, w którym pojawia się potrzeba użycia tych wyrażeń regularnych.


XI
  • Rejestracja:około 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

''(public)|(private)\sclass\s[A-Za-z0-9_-]+/s {
(public)|(private)\sclass\s[A-Za-z0-9_-]+/s {
VAR\s+[A-Za-z0-9_-]+=[A-Za-z0-9_-]+\n
proc/s[A-Za-z0-9_-]+
{
([A-Za-z0-9_-]+\s[A-Za-z0-9_-]+\n)*
}
\s*
(public)|(private)\sclass\s[A-Za-z0-9_-]+/s {
VAR\s+[A-Za-z0-9_-]+=[A-Za-z0-9_-]+/n
proc/s[A-Za-z0-9_-]+\s*
{
([A-Za-z0-9_-]+\s[A-Za-z0-9_-]+\n)*
}\s*
}\s*''

@LukeJL To tylko przykład ale chcę żeby mi się procedury klasy i zmienne mieszały i było ich nieskończone ilości. Przykład może na szybko ale w takich sytułacjach będę tego używał. Nie wiem czy to co napisałem nie ma błędów.

edytowany 1x, ostatnio: Xix
NoZi
Widzę już post @Shalom jak wkleja obrazek 'Kill if with fire', a może nie ?;)
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
3

@Xix języki programowania z reguły są językami Bezkontekstowymi a nie Regularnymi i w związku z tym nie da sie ich poprawnie parsować za pomocą regexpów. Jak chcesz parsować język programowania to użyj jakiegoś generatora parserów SLR, LR, LL (np. Antlr czy bison).


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
XI
  • Rejestracja:około 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

Co ?! Jakimi ? Bezkontekstowymi ? Co to parsery ? Ja teraz z mojej książki wyczytałem wyrażnia regularne i jeśli się nie da to są dla mnie nie przydatne...

To co mam zrobić. W jakim to się języku pisze ?

edytowany 2x, ostatnio: Xix
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
3

To nie kwestia języka, tylko nieznajomości u ciebie pewnych podstaw informatyki. Zacznij może tutaj: http://wazniak.mimuw.edu.pl/index.php?title=J%C4%99zyki%2C_automaty_i_obliczenia albo tu http://infolab.stanford.edu/~ullman/ialc.html albo tu: http://kompilatory.agh.edu.pl/


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
XI
  • Rejestracja:około 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

@Shalom Czego dokładnie nie wiem ? W mojej książce nic takiego nie ma. Czyli wyrażenia regularne dadzą radę jak się czegoś poducze ?

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
3

Nie bo wyrażenia regularne są do parsowania języków regularnych a nie bezkontekstowych. Jakieś proste powtarzalne konstrukcje można tak przetwarzać, ale dowolnego kodu w javie już nie.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
spartanPAGE
Zaczynam chyba postrzegać rozdawanie łapek jako swoiste hobby
XI
  • Rejestracja:około 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

@Shalom To czego użyć i czemu nie zrobiono tego w wyrażeniach regularnych ?

spartanPAGE
czemu nie zrobiono tego w wyrażeniach regularnych ? -> wyrażenia regularne są do parsowania języków regularnych a nie bezkontekstowych; poczytaj linki, jakie dostałeś (http://kompilatory.agh.edu.pl/) to zrozumiesz
XI
  • Rejestracja:około 10 lat
  • Ostatnio:około 9 lat
  • Postów:231
0

@Shalom @spartanPAGE @LukeJL Ach już trochę rozumiem, ale jeszcze muszę więcej doczytać by zamknąć temat. Naprwdę wyleczyliście mnie z depresji :)

edytowany 3x, ostatnio: Xix

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.