Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Ας υποθέσουμε πως ψάχνω δυο λέξεις κλειδιά (brown και dog) στην παρακάτω πρόταση:

The quick brown fox jumps over the lazy dog.

Αναρωτιέμαι αν υπάρχει τρόπος να ψάξω σε έναν editor (έχω Atom, Sublime & Notepad++) αυτές τις δύο λέξεις κλειδία ταυτόχρονα. Υπάρχει κάτι built-in γι' αυτά τα προγράμματα ή έστω κάποιο add-in που να κάνει τη δουλεία;

Ευχαριστώ

 

Δημοσ. (επεξεργασμένο)

Στο notepad++ με ctrl+f πας στο mark και γράφεις

brown|dog

στη συνέχεια στο search mode επιλέγεις Regular expression και μετά mark all.

Επεξ/σία από terminator-x
Δημοσ.
11 λεπτά πριν, Eru Iluvatar είπε

Ας υποθέσουμε πως ψάχνω δυο λέξεις κλειδιά (brown και dog) στην παρακάτω πρόταση:

The quick brown fox jumps over the lazy dog.

Αναρωτιέμαι αν υπάρχει τρόπος να ψάξω σε έναν editor (έχω Atom, Sublime & Notepad++) αυτές τις δύο λέξεις κλειδία ταυτόχρονα. Υπάρχει κάτι built-in γι' αυτά τα προγράμματα ή έστω κάποιο add-in που να κάνει τη δουλεία;

Ευχαριστώ

 

Ναι αυτό που θες μπορεί να γίνει με regular expressions σε sublime και vs code από ότι ξέρω. Π.χ VS Code , Sublime .

Γενικότερα όπως σου είπα και στο άλλο thread για τέτοια θέματα το grep είναι ακριβώς αυτό που χρειάζεσαι αλλά είναι σε unix.

Δημοσ.
2 λεπτά πριν, terminator-x είπε

Στο notepad++ με ctrl+f πας στο mark και γράφεις


brown|dog

στη συνέχεια στο search mode επιλέγεις Regular expression και μετά mark all.

Ευχαριστώ. Αυτός ο κώδικας ψάχνει το ένα ή το άλλο και όχι τα δύο μαζί.

Δημοσ.
1 λεπτό πριν, terminator-x είπε

Τότε δεν κατάλαβα καλά. Δεν ψάχνεις έναν τρόπο να σου γίνει highlighted το brown και dog μαζί?

Βρήκα αυτό σε Sublime Text:

Αναφορά σε κείμενο

brown.+dog

 

Δημοσ. (επεξεργασμένο)

Αν υποθέσουμε γιατί μόνο υποθέσεις μπορούμε να κάνουμε ότι θες οι δύο λέξεις να βρίσκονται στην ίδια πρόταση ψαχνεις κάτι λοιπόν με . κενό  χαρακτήρες χωρίς τελεία 0 ή περισσότερους   κενό brown κενό χαρακτήρες χωρίς τελεία 0 ή περισσότερους κενό fox χαρακτήρες 0 ή περισσότερους . Πώς το κάνεις αυτό;  https://www.regular-expressions.info/

Μπορεί να σου φένεται δύσκολο αλλά μόλις καταλάβεις 2-3 πράγματα από regex είσαι έτοιμος και έχεις και ένα βέλος στη φαρέτρα γιατί θα το ξαναχρειαστείς σίγουρα.

Προσοχή η τελεία είναι special character και πρέπει να την κάνεις escape.

Επεξ/σία από k33theod
Δημοσ.
Μόλις τώρα, k33theod είπε

Αν υποθέσουμε γιατί μόνο υποθέσεις μπορούμε να κάνουμε ότι θες οι δύο λέξεις να βρίσκονται στην ίδια πρόταση ψαχνεις κάτι λοιπόν με . κενό  χαρακτήρες χωρίς τελεία 0 ή περισσότερους   κενό brown κενό χαρακτήρες χωρίς τελεία 0 ή περισσότερους κανό fox χαρακτήρες εως τελεία 0 ή περισσότερους . Πώς το κάνεις αυτό;  https://www.regular-expressions.info/

Μπορεί να σου φένεται δύσκολο αλλά μόλις καταλάβεις 2-3 πράγματα από regex είσαι έτοιμος και έχεις και ένα βέλος στη φαρέτρα γιατί θα το ξαναχρειαστείς σίγουρα.

Προσοχή η τελεία είναι special character και πρέπει να την κάνεις escape.

Το έχω καταλάβει. Είναι κάτι που πρέπει να μάθω καλά. Σε πρώτη φάση, οι λέξεις να είναι μέσα στην ίδια πρόταση. Μπορεί να χρειαστεί όμως να είναι και στην ίδια παράγραφο.

Δημοσ. (επεξεργασμένο)
4 λεπτά πριν, Eru Iluvatar είπε

Το έχω καταλάβει. Είναι κάτι που πρέπει να μάθω καλά. Σε πρώτη φάση, οι λέξεις να είναι μέσα στην ίδια πρόταση. Μπορεί να χρειαστεί όμως να είναι και στην ίδια παράγραφο.

Στήν παράγραφο τα πράγματα απλουστεύουν γιατί ψάχνεις αρχή κειμένου ή παραγράφο χαρακτήρες δεν σε νοιάζει τι brown χαρακτήρες δεν σε νοιάζει τι fox χαρακτήρες δεν σε νοιάζει τι  παράγραφο ή τελος αρχείου.

Επεξ/σία από k33theod
Δημοσ.
2 ώρες πριν, k33theod είπε

Στήν παράγραφο τα πράγματα απλουστεύουν γιατί ψάχνεις αρχή κειμένου ή παραγράφο χαρακτήρες δεν σε νοιάζει τι brown χαρακτήρες δεν σε νοιάζει τι fox χαρακτήρες δεν σε νοιάζει τι  παράγραφο ή τελος αρχείου.

Τα πράγματα γίνονται λίγο πιο περίπλοκα αν θέλεις να κάνεις extract κείμενο το οποίο ξεχωρίζει μέσω white space. Θα δώσω ένα παράδειγμα:

 

Αναφορά σε κείμενο

<DIV
The roars of lions that refuse the chain,
The grunts of bristled boars, and groans of bears,
And herds of howling wolves that stun the sailors' ears.
</DIV>

Έχω χρησιμοποιήσει τον παρακάτω κώδικα:

Αναφορά σε κείμενο

<DIV.+roars.+lions.+DIV>

Αλλά δεν μου κάνει highlight από το <DIV sto DIV> μαζί με όλο το περιεχόμενο μέσα.

Δημοσ. (επεξεργασμένο)

Οι regex είναι ένα πολύ χρήσιμο εργαλείο μεν αλλά έχουν περιορισμούς + είναι σπασαρχίδικες. Επίσης υπάρχουν πολλά και διαφορετικά implementations τα οποία δεν είναι 100% compatible μεταξύ τους. Τα απλά βέβαια είναι συνήθως ίδια.

Στην περίπτωση σου θες να δώσεις ένα flag για να κάνει match και το newline character γιατί από default το κείμενο εξετάζεtαι γραμμή γραμμή και όχι όλο μαζί. Δες πχ εδώ:

https://docs.python.org/3/library/re.html#re.DOTALL

https://regex101.com/r/RLzYg6/1

Πιθανά τέτοιο flag να μην υπάρχει στο sublime...

edit

Για την ιστορία, εν γένει αντενδείκνυται να χρησιμοποιείς regex για HTML-like parsing. Βέβαια αν θες κάτι απλό είναι συνήθως ΟΚ.

https://stackoverflow.com/a/1732454/592289

Επεξ/σία από pmav99
Δημοσ. (επεξεργασμένο)
1 ώρα πριν, pmav99 είπε

Οι regex είναι ένα πολύ χρήσιμο εργαλείο μεν αλλά έχουν περιορισμούς + είναι σπασαρχίδικες. Επίσης υπάρχουν πολλά και διαφορετικά implementations τα οποία δεν είναι 100% compatible μεταξύ τους. Τα απλά βέβαια είναι συνήθως ίδια.

Στην περίπτωση σου θες να δώσεις ένα flag για να κάνει match και το newline character γιατί από default εξετάζει γραμμή γραμμή το κέιμενο και όχι όλο μαζί. Δες πχ εδώ:

https://docs.python.org/3/library/re.html#re.DOTALL

https://regex101.com/r/RLzYg6/1
Πιθανά τέτοιο flag να μην υπάρχει στο sublime.

Ο κώδικας  για Sublime &  Notepad++ είναι: 

Αναφορά σε κείμενο

(?s)<DIV.+lions.+wolves.+DIV>.

Το Notepad++ έχει επιλογή: mathches newline οπότε γίνεται η δουλεία εκεί έχοντας τα regex ticked.

Βέβαια, κι αυτό είναι λίγο προβληματικό γιατί διαλέγει ολα τα πράγματα. Εγώ θα ήθελα κάτι που υπάρχει μόνο μεταξύ των DIV που έχουν τις λέξεις κλειδιά μόνο. Για παράδειγμα, ο κώδικας (?s)<DIV.+lions.+wolves.+DIV> διαλεγει τα πάντα και όχι κάθε παράγραφο μέσα στα DIV.

Αναφορά σε κείμενο

<DIV
The roars of lions that refuse the chain,
The grunts of bristled boars, and groans of bears,
And herds of howling wolves that stun the sailors' ears.
</DIV>

Other text

<DIV
lions and wolves
</DIV>

 

Επεξ/σία από Eru Iluvatar
Δημοσ. (επεξεργασμένο)

regex brown\s+dog στο notepad++ θα σου βρει

brown dog

brown      dog

Brown DoG

δεν θα σου βρει browndog brown.dog brown_dog brown-dog

 

 

Επεξ/σία από ajaxmonkey4hire
Δημοσ. (επεξεργασμένο)

Αυτά που είναι μέσα σε αγκύλες μπορείς να τα αντικαστήσεις με . με την προυπόθεση ότι ενεργοποιείς την επιλογή DOT MATCHES NEW LINE

Αν προσέξεις στην δεύτερη περίπτωση τελειώνει το match πιο κάτω αυτό γίνεται γιατί το dot είναι greedy για να το κάνεις not greedy πρέπει μετά από το dot να βάλεις ? Τα word bountaries χρειάζονται γιατί αλλιώς θα σου κάνει κάνει match και το boars στο laboars πχ

Untitled2.png

Untitled2.png

Επεξ/σία από k33theod

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...