[PERL][Regex] obcinanie tekstu, jak to prawidłowo ustawic.

0

Witam

Mam nastepujące pytanie:
Przykładowo jest teskt:

]Perl został zaprojektowany jako praktyczne narzędzie do analizy plików tekstowych i tworzenia raportów. Jednym z naczelnych haseł jest Można to zrobić na różne sposoby (ang. There is more than one way to do it – TIMTOWTDI – wymawiane jak Tim Toady). Jednym z podstawowych zamysłów projektu było uczynienie łatwych zadań łatwymi do wykonania, zaś trudnych – wykonalnymi. Wszechstronność Perla pozwala na programowanie w różnych modelach: proceduralnym, funkcyjnym czy obiektowym, chociaż purystom przeszkadza podejście polegające na przedkładaniu wygody programisty nad czystość projektu.

Z którego potrzebuję wyciągnąć zaznaczony fragment.

Jak prawidlowo wygląda kod do wycięcia zaznaczonego fragmentu tekstu?

Bo próbowałem chyba z 50 czy 100kombinacji poniższego zapisu,
Najblizej do idealu były różne kombinacje podobne do tego(około 10):
if ((/Jednym*/)) { if (/pozwala/){ ale żaden nie działał tak jak powinien (albo nie obcinał jak trzeba, albo wycięte było wszystko, co również nie było celem
Jedno co ustalilem z calą pewnością, to to - że trzeba uwzględnić w wyrażeniu ignorowanie znaku końca linni, tylko jeszcze nie wiem, jak to się robi.

Szukałem już na wikipedii, przejrzałem kilkanaście (o ile nie kikadziesiąt) stron i poradnikow, kilka ebookow,
i ciąglę jestem w tym samym punkcie, nie wiem dlaczego, ale nie działa.
W dodatku mam wrażenie, że im więcej czytam o wyrażeniach regularnych, tym mniej z nich rozumiem, za dużo widzę teorii, i ogólnikowych definicji, a za mało czytelnych przykładów, wykraczających poza podstawy zagadnienia.

Dzięki i Pozdrawiam.
:-/

0

Nie znam się na perlu, ale na regexach trochę.

  1. Nie możesz dopasowywać tylko "jednym", do występuje dwa razy,

w moim języku wyglądałoby to tak: Regex.Match(@"Jednym z podstawowych[^( chociaż)]"), czyli sam RegEx to
Jednym z podstawowych[^( chociaż)]+
Może podziała...

0

To nieco naiwne, że chcesz po prostu wyciąć konkretne zdanie, zwykle ustala się jakieś reguły (typu trzecie zdanie, aż do napotkania przecinka), ale jeśli chcesz tak na sztywno, to proszę:

s/Jednym.*?obiektowym//;

0

@up - zUy kod.
Bo 1: wytnie ci zdanie "Jednym z naczelnych haseł jest Można to zrobić na różne sposoby (ang. There is more than one way to do it – TIMTOWTDI – wymawiane jak Tim Toady). Jednym z podstawowych zamysłów projektu było uczynienie łatwych zadań łatwymi do wykonania, zaś trudnych – wykonalnymi. Wszechstronność Perla pozwala na programowanie w różnych modelach: proceduralnym, funkcyjnym czy obiektowym" zamiast wymaganego,
2: nie polecam używania .* (od kiedy przez godzinę debugowałem regexa pożerającego za dużo znaków - aż w końcu wyrzuciłem '.'w ^&%* i podziałało).,
3: to \s na początku (jeśli kojarzę że jest to dopasowanie białego znaku?) sprawi że zostanie dopasowane, a autor wyraźnie mówił że tego nie chcę ;)

a z tym:

To nieco naiwne, że chcesz po prostu wyciąć konkretne zdanie, zwykle ustala się jakieś reguły

Się zgadzam. Nie do końca rozumiem po co ci to? :/

0
MSM napisał(a)

@up - zUy kod.
Bo 1: wytnie ci zdanie "Jednym z naczelnych haseł jest Można to zrobić na różne sposoby (ang. There is more than one way to do it – TIMTOWTDI – wymawiane jak Tim Toady). Jednym z podstawowych zamysłów projektu było uczynienie łatwych zadań łatwymi do wykonania, zaś trudnych – wykonalnymi. Wszechstronność Perla pozwala na programowanie w różnych modelach: proceduralnym, funkcyjnym czy obiektowym" zamiast wymaganego,

Jacekalex napisał(a)

Jak prawidlowo wygląda kod do wycięcia zaznaczonego fragmentu tekstu?

Rozumiem, że tekst pogrubiony == zaznaczony.

MSM napisał(a)

2: nie polecam używania .* (od kiedy przez godzinę debugowałem regexa pożerającego za dużo znaków - aż w końcu wyrzuciłem '.'w ^&%* i podziałało).,

Nie użyłem /./ tylko /.?/. To pierwsze jest zachłanne, to drugie zatrzyma się na pierwszym napotkanym dopasowaniu.

MSM napisał(a)

3: to \s na początku (jeśli kojarzę że jest to dopasowanie białego znaku?) sprawi że zostanie dopasowane, a autor wyraźnie mówił że tego nie chcę ;)

To nie jest \s, tylko Perlowe podstawienie s///;

0

To nie jest \s, tylko Perlowe podstawienie s///;

ok, to sorry.

Rozumiem, że tekst pogrubiony == zaznaczony.

Tak, ale słowo 'jednym' występuje dwa razy :] Pierwszy raz w drugim zdaniu, drugi w trzecim (i o to chodzi).

Nie użyłem /./ tylko /.?/. To pierwsze jest zachłanne, to drugie zatrzyma się na pierwszym napotkanym dopasowaniu.

No proszę, zawsze się można czegoś nowego dowiedzieć ;)

0

Ah, rzeczywiście. To w takim razie niech dopasowanie zaczyna się od 'Jednym z p' np. :)

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