Bylejaka kolejność w wyrażeniach regularnych

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+''

0

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

0

http://ideone.com/RfgFn4

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
x=6 y=7 
zimabwe=123

|

('x', '6')
('y', '7')
('zimabwe', '123')
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.
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 ?

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ń.

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ć.

0

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

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.

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.

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).

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 ?

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/

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 ?

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.

0

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

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1