Regex kérdés

 ( fezo | 2018. október 14., vasárnap - 21:02 )

Van egy szöveg, aminek minden sora
[x]...[/x]
közé van zárva.
Szeretném az összes elemet törölni azon sorok kivételével amelyek kötőjellel kezdődnek.
Vagyis az olyan sorhoz ami
[x]—...[/x]
képen néz ki, ne nyúljon.

A válaszokat előre is köszönöm.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

/^\[x\](?!-).*\[\/x\]$/

cat szoveg |tr -d "\<[x]...[/x]\>" ?

A tr nem kezel regexpet, kizárólag karaktereket.

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

Jogos, utana rajottem, hogy elsiettem, koszi. :)

grep -v -e '^\[x]—.*\[/x]$' file

Vagy nem értem a feladatot.

Hm, ha az a feladat, hogy x nem fixen "x", hanem mindenféle, akkor az alábbi kellhet:

grep -v -e '^\[\([^]]*\)]-.*\[/\1]$' file

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

perl -p -i -e s/\[x\][^-].+\[x\]//g szoveg.txt

Ugyanez sed-el is. Szerintem. Fejből írtam remélem nincs elgépelve. :)

---
"A megoldásra kell koncentrálni nem a problémára."

ez nem törli a sort ha nem tévedek csak üressé teszi.
illetve [^-].+ helyett (?!-).* mert nem kötötték ki hogy mindig van akár 1 karakter is az x tag-ek közt.

~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack

"ez nem törli a sort ha nem tévedek csak üressé teszi."
Jár a pont. Akkor így:
perl -p -i -e 's/\[x\][^-].+\[x\]\n//g' szoveg.txt

"illetve [^-].+ helyett (?!-).* mert nem kötötték ki hogy mindig van akár 1 karakter is az x tag-ek közt."
Ezért is jár a pont, de a [^-] és a (?!-) a feladat szempontjából ekvivalens, csak a .+ és .* szerint kérdéses, hogy létezik-e az az eset, hogy az ixek között semmi nincs.

Mint írtam fejből ment, buszon űlve telefonról. Nem teszteltem... :)
(Egyébként az aposztrofokat is lefelejtettem a regexp-ről)

---
"A megoldásra kell koncentrálni nem a problémára."

Idézet:
a [^-] és a (?!-) a feladat szempontjából ekvivalens

azt hiszem itt egy kissé ellenkeznem kell. a [^-] megköveteli hogy legyen ott egy karakter.

~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack

Így egyből ki is tudod próbálni:
\[x\][^-].+\[\/x\]
https://regex101.com/r/jX5ydS/2

Mi itt jól elbeszélgetünk magunkban, ezzel szemben mindenkinek üzenem, hogy a ] önmagában nem speciális karakter regexpben, így fölösleges elé \ -t tenni. :-)

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

Köszi a sok hozzászólást és ötletet, ahogy elnézem nem voltam eléggé egyértelmű. Talán második nekifutásra valami összejön.
1. Csak a zárójeleket és a közöttük levő részt kellene törölni nem az egész sort.
2. Az eredeti szöveg így néz ki:
https://regex101.com/r/LCUxJV/1

Az [x]...[/x] példában mások a zárójelek, mert a HUP a kisebb-nagyobb jelek közé ékelt karaktereket HTML elemnek nézi és nem jeleníti meg.
Sempi kolléga javaslata a legjobb, de ez is az egész sort kijelöli, nekem csak az elemek kellenek.

Hogy mire kell? PDF állományt szeretnék Calibre-vel MOBI formátumba konvertálni és a párbeszéden kívül a többi sort olvashatóbbá kellene tenni.

Ilyesmi kimenet kellene?

Fără să comenteze, Sam mi-a dat paharul cu vin
[p]– pe care l-am examinat atentă, pentru a fi sigură[/p]
că e perfect curat – şi am pornit spre masa

--
eutlantis

Pontosan, csak kisebb-nagyobb jelekkel a zárójelek helyett.

Python3-ban:

import re

with open("book") as fin, open("book.out","w") as fo:
    fo.write( re.sub(r"[p]\s*(?!–)([^<>]+?)[/p]", r"\1", fin.read()) )

Értelemszerűen a kisebb-nagyobb jeleket cseréld le. Egyébként, ahogy átmásoltam a szövegedet a próbához, kétféle kötőjelszerű karaktert kaptam, de lehet, hogy valamit elrontottam a tesztnél.
Ha nem, akkor a (?!-) helyett ilyesmi kell (?![-—])
--
eutlantis

Ez működik!
Köszönöm szépen!

"Normálisan" leírva, a '[p]' helyett a '<p>'-t használva:

with open("book") as fin, open("book.out","w") as fo:
    fo.write( re.sub(r"<p>\s*(?!–)([^<>]+?)</p>", r"\1", fin.read()) )

--
eutlantis

grep ami kell és másik file-ba irányítani.
Egy pozitív regex, ennél gyorsabb nincs. Nem kell mindig a fordított logika.
--
Gábriel Ákos