Regex-Syntaksi ja Peruskuviot
Pyyhkäise näyttääksesi valikon
Regex-syntaksi: Rakennuspalikat
Säännölliset lausekkeet eli regex muodostetaan yhdistämällä literaaleja, metamerkkejä, merkkiluokkia ja kvanttereita. Näiden osien ymmärtäminen on olennaista tehokkaiden mallien kirjoittamisessa.
- Literaalit ovat tavallisia merkkejä, jotka vastaavat itseään. Esimerkiksi kuvio
"cat"vastaa täsmälleen merkkijonoa"cat"; - Metamerkit ovat erikoissymboleita, joilla on erityinen merkitys regexissä. Yleisimpiä metamerkkejä ovat:
.(piste): vastaa mitä tahansa yksittäistä merkkiä paitsi rivinvaihtoa;^: vastaa merkkijonon alkua;$: vastaa merkkijonon loppua;*: vastaa nolla tai useampaa edeltävän alkion esiintymää;+: vastaa yhtä tai useampaa edeltävän alkion esiintymää;?: vastaa nolla tai yhtä edeltävän alkion esiintymää.
- Merkkiluokat mahdollistavat minkä tahansa yksittäisen merkin vastaamisen tietystä joukosta. Esimerkiksi
[abc]vastaa"a","b"tai"c", ja[0-9]vastaa mitä tahansa numeroa 0–9.
Hyödylliset kirjainpohjaiset metamerkit ja kvantterit
\w: vastaa mitä tahansa sana-merkkiä (vastaa[a-zA-Z0-9_]). Käytetään yksittäisten kirjainten, numeroiden tai alaviivojen vastaamiseen;\W: vastaa mitä tahansa ei-sana-merkkiä (kaikki, mitä\wei vastaa);\d: vastaa mitä tahansa numeroa (vastaa[0-9]);\D: vastaa mitä tahansa ei-numeroa;\b: vastaa sanarajaa (kohta sana-merkin ja ei-sana-merkin välillä). Käytetään kokonaisten sanojen vastaamiseen;\B: vastaa kohtaa, joka ei ole sanarajalla.
Kvantterit
Kvantterit määrittävät, kuinka monta kertaa edeltävän alkion tulee esiintyä:
*: vastaa nolla tai useampaa kertaa; esimerkiksi\w*vastaa mitä tahansa sana-merkkien jonoa, myös tyhjää merkkijonoa;+: vastaa yhtä tai useampaa kertaa; esimerkiksi\w+vastaa yhtä tai useampaa peräkkäistä sana-merkkiä (kuten sanaa);?: vastaa nolla tai yhtä kertaa; esimerkiksi\w?vastaa nolla tai yhtä sana-merkkiä;{n}: vastaa täsmälleen n kertaa; esimerkiksi\w{3}vastaa täsmälleen kolmea peräkkäistä sana-merkkiä;{n,}: vastaa n tai useampaa kertaa; esimerkiksi\w{2,}vastaa kahta tai useampaa sana-merkkiä;{n,m}: vastaa vähintään n ja enintään m kertaa; esimerkiksi\w{2,5}vastaa kahdesta viiteen peräkkäistä sana-merkkiä.
Esimerkkejä Pythonissa
re.findall(r"\w+", "Regex123 is fun!")palauttaa kaikki sanat:["Regex123", "is", "fun"];re.findall(r"\bcat\b", "The cat scattered the catalog.")vastaa vain itsenäistä sanaa"cat";re.findall(r"\w{5}", "apple banana kiwi")löytää kaikki täsmälleen viiden sana-merkin jonot:["apple", "banan"].
Nämä metamerkit ja kvantterit ovat keskeisiä kirjainten, sanojen ja sana-tyyppisten mallien vastaamisessa tekstistä Pythonin re-kirjastolla.
123456789101112131415import re text = "User123, admin42, guestX" # Find all digits digits = re.findall(r"[0-9]", text) print("Digits found:", digits) # Find all lowercase letters lowercase_letters = re.findall(r"[a-z]", text) print("Lowercase letters found:", lowercase_letters) # Find all uppercase letters uppercase_letters = re.findall(r"[A-Z]", text) print("Uppercase letters found:", uppercase_letters)
Tässä esimerkissä käytetään re.findall()-funktiota etsimään osumia merkkijonosta "User123, admin42, guestX". Kuvio [0-9] vastaa mitä tahansa numeroa väliltä 0–9, joten se löytää kaikki yksittäiset numerot tekstistä. Kuvio [a-z] vastaa mitä tahansa pientä kirjainta "a"–"z", ja [A-Z] vastaa mitä tahansa isoa kirjainta "A"–"Z". Jokainen merkkiluokka on suljettu hakasulkeisiin, jotka määrittävät vastaavien merkkien joukon tai alueen. Nämä kuviot ovat keskeisiä tietyn tyyppisten merkkien poimimisessa tekstistä.
123456789101112131415161718192021222324252627import re text = "Hello_123 world! Regex is fun." # \w matches any word character (alphanumeric or underscore) word_chars = re.findall(r"\w", text) print("Word characters (\\w):", word_chars) # \W matches any non-word character non_word_chars = re.findall(r"\W", text) print("Non-word characters (\\W):", non_word_chars) # \b matches word boundaries words = re.findall(r"\b\w+\b", text) print("Words using word boundaries (\\b):", words) # * quantifier: zero or more word characters after 'o' pattern_star = re.findall(r"o\w*", text) print("'o' followed by zero or more word characters (o\\w*):", pattern_star) # + quantifier: one or more word characters after 'R' pattern_plus = re.findall(r"R\w+", text) print("'R' followed by one or more word characters (R\\w+):", pattern_plus) # ? quantifier: 'l' optionally followed by 'e' pattern_question = re.findall(r"le?", text) print("'l' optionally followed by 'e' (le?):", pattern_question)
Tässä näet, miten Pythonin re.findall()-funktiota käytetään eri regex-kuvioiden kanssa tiedon poimimiseen merkkijonosta "Hello_123 world! Regex is fun.". Alla selitetään, mitä kukin kuvio tekee:
-
\w: Kuvior"\w"vastaa mitä tahansa sanamerkkiä, eli kirjainta (iso tai pieni), numeroa tai alaviivaa (_). Annetussa merkkijonossa tämä löytää jokaisen yksittäisen sanamerkin, kuten'H','e','l','o','1','2','3'jne. -
\W: Kuvior"\W"vastaa mitä tahansa ei-sanamerkkiä. Näitä ovat esimerkiksi välilyönnit, välimerkit ja symbolit, jotka eivät ole kirjaimia, numeroita tai alaviivoja. Merkkijonossa tämä löytää esimerkiksi välilyönnit, huutomerkin (!) ja pisteen (.). -
\b: Kuvior"\b\w+\b"käyttää sananrajoja (\b) kokonaisten sanojen löytämiseen. Tässä\w+vastaa yhtä tai useampaa sanamerkkiä, joten tämä poimii kokonaiset sanat, kuten'Hello_123','world','Regex','is'ja'fun'erillisinä alkioina. -
*kvantifioija: Kuvior"o\w*"vastaa merkkiä'o', jota seuraa nolla tai useampi sanamerkki. Tämä tarkoittaa, että se löytää'o'vaikka sitä ei seuraisi yhtään sanamerkkiä, tai se poimii jakson, joka alkaa'o':lla ja jatkuu mahdollisilla seuraavilla sanamerkeillä. Merkkijonossa tämä löytää'o_123'(sanasta'Hello_123') ja'orld'(sanasta'world'). -
+kvantifioija: Kuvior"R\w+"vastaa merkkiä'R', jota seuraa yksi tai useampi sanamerkki. Tämä on hyödyllinen, kun halutaan löytää sanoja, jotka alkavat'R':llä ja jatkuvat sanamerkeillä. Merkkijonossa tämä löytää'Regex'. -
?kvantifioija: Kuvior"le?"vastaa kirjainta'l', jota seuraa mahdollisesti'e'.?-kvantifioija tarkoittaa, että edeltävä merkki ('e') voi esiintyä nolla tai yhden kerran. Tämä kuvio löytää sekä'l'että'le'aina kun ne esiintyvät merkkijonossa.
Nämä kuviot havainnollistavat säännöllisten lausekkeiden keskeisiä ominaisuuksia—tiettyjen merkkityyppien, rajojen ja toistuvien elementtien tunnistamista—mikä helpottaa tiedon poimimista tai analysointia tekstistä Pythonilla.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme