WebHU - Programozási kérdések és válaszok

A reguláris kifejezések megértése python elválasztókban, al,

Megpróbálom megérteni a mintaillesztést, és nagyon megzavart az alábbi kód. A tudomásom szerint ellenőrzi, hogy van-e 2-5 nagybetűs darab a küldés végén. Ezután a számokkal határolt darabokat ""-re, a nagybetűs kisbetűs kisbetűket pedig ""-re cseréli.

Azt hiszem, tényleg nem értek valamit... Hogyan tudom megfejteni a re.sub sorokat?

Azt hiszem, a re.split felosztása a határoló alapján lett elküldve, ahol a . helyettesítő karaktert jelent?

Tudna valaki mutatni egy szemléltető példát?

import re
    x=0
    y=[]
    while x<100:
        sent = raw_input("gimmie a sentence")
        if re.search('[A-Z]{2,5}$', sent):
            print("HERE")
            sent = re.sub('[0-9]+\.[0-9]+','<PAT1>', sent)
            print(sent)
            sent = re.sub(' [A-Z][a-z]+ [A-Z][a-z]+ [^A-Z]', '<PAT2>', sent)
            print(sent)
            y+=re.split('<PAT.>', sent)
        x+= 1
        print(x)
        print(y)
    print y
05.11.2015

  • Csak nem érti teljesen a reguláris kifejezéseket, vagy nem olvasta el a re.sub dokumentációját? Úgy tűnik, jól érti a darabjait, így nem tudom, hol van a probléma 05.11.2015

Válaszok:


1

A fenti kérdésben szereplő re magyarázata-

[A-Z]{2,5}$

[A-Z]{2,5}$

Lehetőségek: a kis- és nagybetűk megkülönböztetése; Pontos térköz; A pont nem egyezik a sortörésekkel; ^$ nem egyezik sortöréseknél; Csak reguláris kifejezések szintaxisa

  • Match a single character in the range between “A” and “Z” (case insensitive) [A-Z]{2,5}
    • Between 2 and 5 times, as many times as possible, giving back as needed (greedy) {2,5}
  • Assert pozíció a karakterlánc végén, vagy a sortörés előtt a karakterlánc végén, ha van ilyen (soremelés) $

[0-9]+.[0-9]+

[0-9]+\.[0-9]+

Lehetőségek: a kis- és nagybetűk megkülönböztetése; Pontos térköz; A pont nem egyezik a sortörésekkel; ^$ nem egyezik sortöréseknél; Csak reguláris kifejezések szintaxisa

  • Match a single character in the range between “0” and “9” [0-9]+
    • Between one and unlimited times, as many times as possible, giving back as needed (greedy) +
  • Párosítsa a „.” karaktert szó szerint \.
  • Match a single character in the range between “0” and “9” [0-9]+
    • Between one and unlimited times, as many times as possible, giving back as needed (greedy) +

[A-Z][a-z]+ [A-Z][a-z]+ [^A-Z]

[A-Z][a-z]+ [A-Z][a-z]+ [^A-Z]

Lehetőségek: a kis- és nagybetűk megkülönböztetése; Pontos térköz; A pont nem egyezik a sortörésekkel; ^$ nem egyezik sortöréseknél; Csak reguláris kifejezések szintaxisa

  • Egyetlen karakter párosítása „A” és „Z” közötti tartományban (a kis- és nagybetűk megkülönböztetése nélkül) [A-Z]
  • Match a single character in the range between “a” and “z” (case insensitive) [a-z]+
    • Between one and unlimited times, as many times as possible, giving back as needed (greedy) +
  • Párosítsa a „ ” karaktert szó szerint
  • Match a single character in the range between “A” and “Z” (case insensitive) [A-Z]
  • Match a single character in the range between “a” and “z” (case insensitive) [a-z]+
    • Between one and unlimited times, as many times as possible, giving back as needed (greedy) +
  • Párosítsa a „ ” karaktert szó szerint
  • Match any single character NOT in the range between “A” and “Z” (case insensitive) [^A-Z]

re.sub('[0-9]+[0-9]+','', elküldve)

A dokumentáció szerint a re.sub általános formátuma a következő

re.sub(pattern, repl, string, count=0, flags=0)

Példa-

>>> re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',r'static PyObject*\npy_\1(void)\n{','def myfunc():')

Vissza fog térni

'static PyObject*\npy_myfunc(void)\n{'

Ahol a \1 rögzíti a group 1, azaz ([a-zA-Z_][a-zA-Z_0-9]*)

05.11.2015
  • Jó másolás/beillesztés!!! Biztos vagyok benne, hogy az OP most már tökéletesen megérti. Sokat segített. 05.11.2015
  • Ez úgy néz ki, mintha egyenesen a regex101-ből lett volna másolva :) 05.11.2015
  • Tehát mi értelme van az 5-nek a {2,5}-ben? Ez nem ugyanazt az eredményt adná, mint a {2,3}, mivel a kettő továbbra is egyezne 2 nagybetűvel? 05.11.2015
  • lásd az Op kivonatát-it checks to see if there is a chunk of 2-5 capital letters at the end of sent akkor a következő: {2,3}={2,5}?? Megpróbáltam elmagyarázni a regex-et valami hiteles leíráson keresztül, csak mivel az OP megkövetelte 05.11.2015
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..