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

Kérdések a Python reguláris kifejezéseiről

Tanulok a reguláris kifejezésekről, de nehezen tudok értelmezni bizonyos dolgokat. Egy olyan feladaton dolgozom, hogy a reguláris kifejezésekkel keressek különböző karaktereket és szavakat egy karakterláncban:

A findall függvény segítségével lekérheti a 'lorem_ipsum'-hoz rendelt karakterlánc összes nem alfanumerikus karakterét

Kimenet a konzolra, a nem alfanumerikus karakterek száma. Tipp: használja a len funkciót. Használja a ^ és [] reguláris kifejezés operátort a findall() reguláris kifejezés függvénnyel együtt.

pattern = re.compile(r'sit-:amet')
occurrance_sit_amet = pattern.findall(lorem_ipsum)
for match in occurrance_sit_amet:
  print (match)

Miért használjam a len funkciót? és ami még rejtélyesebb, miért használnám a ^-t és a []-t, amikor csak a karakterlánc elején található karaktereket és a zárójelben lévő karaktereket lehet használni? A kódom is ezt a hibát adta:

Nem olvasható a 9b2bb9d0-119a-11e8-95f3-4351563e5e1b „toISOString” tulajdonsága

valaki elmagyarázná, hogy ez mit jelent?

14.02.2018

  • Miért használnám a len funkciót? Mert a hozzárendelés az egyezések számának kiadása, amit a kód nem csinál. miért használnám a ^-t és a []-t, amikor csak a karakterlánc elején lévő karakterek és a zárójelben lévő karakterek megkeresésére használhatók Mert csak így lehet a megfelelő kimenetet elérni. Előfordulhat, hogy (újra) el kell olvasnia egy regex oktatóanyagot, ha úgy gondolja, hogy a [] csak zárójelben lévő szöveg keresésére használható. 14.02.2018

Válaszok:


1

Szerintem félreérted a célzásokat (bár elismerem, hogy elég félrevezetőek). Amikor azt mondja, hogy „használd a ^ és [] karaktereket”, nem azt mondja, hogy használj egy karakterosztályt ([]) és egy karakterlánc-horgony kezdetét (^). Azt mondja, hogy kombinálja az [] és ^ karaktereket, hogy egy fordított karakterosztályt [^] alkosson. A fordított karakterosztályon belül minden nem illeszkedik.

A szükséges reguláris kifejezés a következő:

[^a-zA-Z0-9]

Ez azt jelenti, hogy "mindent kivéve a-z, A-Z vagy 0-9"

A len függvénnyel kapcsolatban az a feladatod, hogy megtudd, hány nem alfanumerikus karakter van, nem? A findall az egyezések listáját adja vissza. Éppen ezért meg kell találnia a lista hosszát, hogy megtudja, hány ilyen karakter van.

Itt van néhány kód:

pattern = re.compile(r'[^a-zA-Z0-9]')
allMatches = pattern.findall(lorem_ipsum)
print(len(allMatches))
14.02.2018

2

Kérdéseire válaszolni:

  1. A findall használata a matches értéket adja vissza, amely az összes olyan karakterlánc listája, amely megfelel a mintának. Tehát a len(matches) adja meg a "nem alfanumerikus karakterek számát".
  2. A ^ a []-el együtt használható bizonyos karaktereket NEM tartalmazó minták keresésére .

Néhány probléma a szabályos kifejezéssel kapcsolatban, amelyek okozhatják ezt a hibát:

  • A kötőjel. A kötőjelek egy tartományt jelölnek, amikor két karakter közé helyezik őket, így jelenleg a reguláris kifejezés t és : közötti karaktereket próbál keresni, ami nem jelent semmit.
  • A regex betűrendes karakterei. A kettősponton kívül jelenleg a r'sit-:amet' egy karakterláncra egyezik, amely egymás után meghatározott kisbetűkből áll. Még ha a reguláris kifejezés működne is, ez nem felelne meg a kívánt „nem alfanumerikus” mintának.

Amire szüksége van, az egy negatív keresés bármi alfanumerikus kifejezésre:


    [^A-Za-z0-9]

P.S. Erősen javaslom a regexr használatát, amikor reguláris kifejezésekkel rendelkezik. Ez egy nagyszerű módja annak, hogy ellenőrizze a mintaillesztési szintaxis működését, és tesztelje a regexeket :)

14.02.2018
Ú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..