π Π‘Π°ΠΌΠΎΡΡΠΈΡΠ΅Π»Ρ ΠΏΠΎ Python Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ . Π§Π°ΡΡΡ 16: Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ re, Π½Π°ΡΡΠΈΠΌΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Regex-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°ΡΡ ΠΎΠΏΠ΅ΡΠ΅ΠΆΠ°ΡΡΠΈΠ΅ ΠΈ ΡΠ΅ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ β ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π½ΡΠ΅ ΠΈ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΡΠ΅. Π ΠΊΠΎΠ½ΡΠ΅ ΡΡΠ°ΡΡΠΈ, ΠΊΠ°ΠΊ Π²ΡΠ΅Π³Π΄Π°, β 10 ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ Π·Π°Π΄Π°Π½ΠΈΠΉ Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ.

Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ (Regex) β ΡΡΠΎ ΠΎΡΠΎΠ±ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°Ρ ΠΈ Π½Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ°Ρ . ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Regex ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π² 1951 Π³ΠΎΠ΄Ρ, ΡΡΠ°Π»Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠΉ ΠΊ 1968 Π³ΠΎΠ΄Ρ, ΠΈ Ρ ΡΠ΅Ρ ΠΏΠΎΡ Π² ΡΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°Ρ , Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°Ρ ΠΠ‘, Π² OCR-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ Π΄Π»Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ°, Π² ΠΎΠ½Π»Π°ΠΉΠ½-ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΠ°Ρ ΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ . ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π΄Π»Ρ:
- Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ ;
- Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°;
- ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ URL (Apache http.conf, mod_rewrite);
- ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ
SQL-Π·Π°ΠΏΡΠΎΡΠΎΠ²;
- ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ
ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² URL-Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° (re_path() Django).
Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Python
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Regex Π² Python ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ re, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΎΠ΄ΡΡ:
- ΠΠ°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ Π·Π°ΠΌΠ΅Π½Ρ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊ β Π½ΠΈΠΆΠ΅ ΠΌΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
- ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ re.compile β ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅Ρ Regex-ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΡΠΊΠΎΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅.
Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΡ ΠΈΠ· Π»ΠΈΡΠ΅ΡΠ°Π»ΠΎΠ² (Π±ΡΠΊΠ² ΠΈ ΡΠΈΡΡ) ΠΈ ΠΌΠ΅ΡΠ°ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΠ»Ρ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΏΠ΅ΡΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ΅ ΡΠ»ΡΡΠΈ \
, ΠΈΠ»ΠΈ ΠΆΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² r-ΡΡΡΠΎΠΊΡ . Π’Π°ΠΊΠΎΠΉ ΡΠ°Π±Π»ΠΎΠ½, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ email-Π°Π΄ΡΠ΅ΡΠ°:
r'^[a-zA-Z0-9._-]+@[a-zA-Z-.]+$'
ΠΡΠΎΡ ΡΠ°Π±Π»ΠΎΠ½ β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΡ , Regex-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ email-Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΌΠΎΠ³ΡΡ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅. ΠΠ»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ Regex ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Regex101:

ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Regex ΠΌΠ΅ΡΠΎΠ΄Ρ Π² Python
re.match() β ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π»ΠΈ ΡΡΡΠΎΠΊΠ° Ρ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°:
import re lst = ['abrakadabra', 'https://kadabra.com', 'https://proglib.io/p/weekly-23-novosti-podkasty-otbornye-stati-i-obuchayushchie-materialy-po-frontendu-2023-02-14 - ΡΡΠ°ΡΡΡ ΠΏΠΎ ΡΡΠΎΠΉ ΡΡΡΠ»ΠΊΠ΅', 'http//:mysite.ru', 'www.abra.com', 'http//abra.com', 'https://abra.com/', 'ΡΡΠΎ ΠΌΠΎΠΉ ΡΠ°ΠΉΡ - https://abrakadabra.com/', 'https://ru.wikipedia.org/wiki/%D0%9B%D1%8F%D0%B3%D1%83%D1%88%D0%BA%D0%B0-%D0%B3%D0%BE%D0%BB%D0%B8%D0%B0%D1%84'] url = r'https?://(www.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()!@:%_+.~#?&/=]*)' for i in lst: m = re.match(url, i) if m: print(m.group(0)) # Π²Π°Π»ΠΈΠ΄Π½Π°Ρ ΡΡΡΠ»ΠΊΠ° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΡΡΡ ΠΈΠ· Π½Π°ΡΠ°Π»Π° ΡΡΡΠΎΠΊΠΈ
ΠΡΠ²ΠΎΠ΄:
https://kadabra.com https://proglib.io/p/weekly-23-novosti-podkasty-otbornye-stati-i-obuchayushchie-materialy-po-frontendu-2023-02-14 https://abra.com/ https://ru.wikipedia.org/wiki/%D0%9B%D1%8F%D0%B3%D1%83%D1%88%D0%BA%D0%B0-%D0%B3%D0%BE%D0%BB%D0%B8%D0%B0%D1%84
ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΡΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅, Π½ΠΎ Π½Π΅ Π² Π½Π°ΡΠ°Π»Π΅ ΡΡΡΠΎΠΊΠΈ β re.match() Π²Π΅ΡΠ½Π΅Ρ None
:
>>> import re >>> s = 'ΠΎΠΉ, ΠΌΠΎΡΠΎΠ·, ΠΌΠΎΡΠΎΠ·, Π½Π΅ ΠΌΠΎΡΠΎΠ·Ρ ΠΌΠ΅Π½Ρ' >>> print(re.match('ΠΌΠΎΡΠΎΠ·', s)) None
ΠΠ΅ΡΠΎΠ΄ re.fullmatch() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ Π²ΡΡ ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π±Π»ΠΎΠ½Ρ:
>>> st1, st2 = 'ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ°', 'ΡΡΡΠΎΠΊΠ°' >>> print(re.fullmatch(r'ΡΡΡΠΎΠΊΠ°', st1)) None >>> print(re.fullmatch(r'ΡΡΡΠΎΠΊΠ°', st2)) <re.Match object; span=(0, 6), match='ΡΡΡΠΎΠΊΠ°'>
Π§ΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ΅ Π²Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ Π² ΡΠ΅ΠΊΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ re.search(), ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ β Ρ ΡΠ»Π°Π³ΠΎΠΌ re.I
Π΄Π»Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ°:
>>> s = 'Π‘ΠΈΠ½ΠΈΠΉ, ΡΠΈΠ½ΠΈΠΉ ΠΈΠ½Π΅ΠΉ Π»Π΅Π³ Π½Π° ΠΏΡΠΎΠ²ΠΎΠ΄Π°' >>> print(re.search('ΡΠΈΠ½ΠΈΠΉ', s, re.I)) <re.Match object; span=(0, 5), match='Π‘ΠΈΠ½ΠΈΠΉ'>
ΠΠ΅ΡΠΎΠ΄ re.search() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ
Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ span()
,
string
ΠΈ group()
.
span Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ:
>>> text = 'ΠΠ΄Π½Π°ΠΆΠ΄Ρ Π²Π΅ΡΠ½ΠΎΡ, Π² ΡΠ°Ρ Π½Π΅Π±ΡΠ²Π°Π»ΠΎ ΠΆΠ°ΡΠΊΠΎΠ³ΠΎ Π·Π°ΠΊΠ°ΡΠ°, Π² ΠΠΎΡΠΊΠ²Π΅, Π½Π° ΠΠ°ΡΡΠΈΠ°ΡΡΠΈΡ ΠΏΡΡΠ΄Π°Ρ , ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π΄Π²Π° Π³ΡΠ°ΠΆΠ΄Π°Π½ΠΈΠ½Π°.' >>> print(re.search('ΠΏΡΡΠ΄', text).span()) (71, 75)
string Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΈΡΠΊΠΎΠΌΡΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ:
>>> st = 'ΠΡΠ°ΠΊΡΠ»Π° ΠΡΡΠΌΠ° Π‘ΡΠΎΠΊΠ΅ΡΠ°' >>> print(re.search('Π‘ΡΠΎΠΊ', st).string) ΠΡΠ°ΠΊΡΠ»Π° ΠΡΡΠΌΠ° Π‘ΡΠΎΠΊΠ΅ΡΠ°
group Π²Π΅ΡΠ½Π΅Ρ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΡ, ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΡΡ Ρ Π·Π°ΠΏΡΠΎΡΠΎΠΌ:
>>> st = 'ΠΏΡΠΈΠΌΠ΅Ρ Π΄ΠΎΠΌΠ°ΡΠ½Π΅Π³ΠΎ Ρ ΠΈΡΠ½ΠΈΠΊΠ°: ΠΊΠΎΡ' >>> print(' ΡΠ΅ΠΊΡΡ Π½Π°ΠΉΠ΄Π΅Π½ - ', re.search(r'Ρ ΠΈΡΠ½ΠΈΠΊΠ°:\s\w\w\w', st).group()) ΡΠ΅ΠΊΡΡ Π½Π°ΠΉΠ΄Π΅Π½ - Ρ ΠΈΡΠ½ΠΈΠΊΠ°: ΠΊΠΎΡ
ΠΡΠ΅ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ re.findall():
>>> st = 'Eins Hier kommt die Sonne, Zwei Hier kommt die Sonne' >>> print(re.findall('Hier kommt die Sonne', st)) ['Hier kommt die Sonne', 'Hier kommt die Sonne']
ΠΠ΅ΡΠΎΠ΄ re.split() ΡΠ°Π·Π΄Π΅Π»ΡΠ΅Ρ ΡΡΡΠΎΠΊΡ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠ°Π±Π»ΠΎΠ½Ρ:
>>> st = 'ΠΌΠΎΡΠΎΠ· ΠΈ ΡΠΎΠ»Π½ΡΠ΅, Π΄Π΅Π½Ρ ΡΡΠ΄Π΅ΡΠ½ΡΠΉ' >>> print(re.split(r'\sΠΈ\s', st, 1)) ['ΠΌΠΎΡΠΎΠ·', 'ΡΠΎΠ»Π½ΡΠ΅, Π΄Π΅Π½Ρ ΡΡΠ΄Π΅ΡΠ½ΡΠΉ']
ΠΠ»Ρ Π·Π°ΠΌΠ΅Π½Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ re.sub(). Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ° Π²ΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΡΠΎΠΌΠ΅ Π±ΡΠΊΠ², ΡΠΈΡΡ, Π·Π½Π°ΠΊΠ° ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ, ΡΠΎΡΠΊΠΈ, ΠΏΡΠΎΠ±Π΅Π»Π°, Π²ΠΎΠΏΡΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° ΠΈ Π·Π°ΠΏΡΡΠΎΠΉ:
>>> st = 'Π#$%^ΡΠΈΠ²&*Π΅Ρ, ΠΊΠ°@!ΠΊ ΡΡΠΏΠ΅~@Ρ ΠΈ Ρ Py$%^*&thon?' >>> print(re.sub('[^Π°-ΡΠ-Π―a-zA-Z0-9,? \n\.]', '', st)) ΠΡΠΈΠ²Π΅Ρ, ΠΊΠ°ΠΊ ΡΡΠΏΠ΅Ρ ΠΈ Ρ Python?
Π‘ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Regex-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ re.compile() ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΠ°Π±Π»ΠΎΠ½ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ:
import re url_lst = ['https://mysite.ru/uploads/2023/2/1/image.jpg', 'https://mysite.ru/uploads/2023/2/1/image.html', 'http://www.mysite.ru/uploads/2022/2/1/another_image.png', 'http://mysite.ru/uploads/2022/12/15/images.doc', 'https://www.mysite.ru/uploads/2022/12/11/image22.jpg', 'http://mysite.ru/images/2023/2/5/gifimage.gif', 'https://mysite.ru/texts/2023/2/1/novel.txt', 'https://mysite.ru/books/2023/2/1/book.epub'] img_url = re.compile(r'https?://(www)?.*.(png|jpg|gif)') for url in url_lst: if img_url.match(url): print(url)
ΠΡΠ²ΠΎΠ΄:
https://mysite.ru/uploads/2023/2/1/image.jpg http://www.mysite.ru/uploads/2022/2/1/another_image.png https://www.mysite.ru/uploads/2022/12/11/image22.jpg http://mysite.ru/images/2023/2/5/gifimage.gif
ΠΠ°ΠΊ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ Π²ΡΡΠ΅, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΄ΠΎΠ±Π½Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ β ΠΎΠ½ΠΈ, ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅, Π±ΡΡΡΡΠ΅Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ. Π§Π΅ΠΌ ΡΠ»ΠΎΠΆΠ½Π΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ±ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ β ΡΠ΅ΠΌ ΠΎΡΠ΅Π²ΠΈΠ΄Π½Π΅Π΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ. ΠΡΠΎΠ²Π΅ΡΠΈΠΌ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ β Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΌΠ½ΡΠΉ ΡΠ°ΠΉΠ» (Β«ΠΡΠ΅ΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΈ Π½Π°ΠΊΠ°Π·Π°Π½ΠΈΠ΅Β» Π€. Π. ΠΠΎΡΡΠΎΠ΅Π²ΡΠΊΠΎΠ³ΠΎ) ΠΈ ΠΏΡΠΎΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠΈΡΠΊ Π²ΡΠ΅Ρ ΡΡΡΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΈΠΌΡ Β«Π ΠΎΠ΄ΠΈΠΎΠ½Β» ΠΈ ΡΠ°ΠΌΠΈΠ»ΠΈΡ Β«Π Π°ΡΠΊΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ²Β» Π² Π»ΡΠ±ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡΡ , ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΡΠ°ΠΌΠΈΠ»ΠΈΠ΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 5 Π΄ΡΡΠ³ΠΈΡ ΡΠ»ΠΎΠ²:
import re import time start = time.time() with open('prestuplenie-i-nakazanie.txt', 'r', encoding='utf8') as book: result = [line for line in book if re.findall(r'\bΠ ΠΎΠ΄ΠΈΠΎ\w{0,3}(?:\s+\S+){0,5}\s+Π Π°ΡΠΊΠΎΠ»ΡΠ½ΠΈΠΊΠΎ\w{0,3}\b', line)] print(f'ΠΠ°ΠΉΠ΄Π΅Π½ΠΎ {len(result)} ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ. ΠΠΎΠΈΡΠΊ Π±Π΅Π· ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π·Π°Π½ΡΠ» {time.time() - start:.2f} ΡΠ΅ΠΊΡΠ½Π΄') start = time.time() with open('prestuplenie-i-nakazanie.txt', 'r', encoding='utf8') as book: find_name = re.compile(r'\bΠ ΠΎΠ΄ΠΈΠΎ\w{0,3}(?:\s+\S+){0,5}\s+Π Π°ΡΠΊΠΎΠ»ΡΠ½ΠΈΠΊΠΎ\w{0,3}\b') result2 = [line for line in book if find_name.findall(line)] print(f'ΠΠ°ΠΉΠ΄Π΅Π½ΠΎ {len(result2)} ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ. ΠΠΎΠΈΡΠΊ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ Π·Π°Π½ΡΠ» {time.time() - start:.2f} ΡΠ΅ΠΊΡΠ½Π΄')
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΠ°ΠΉΠ΄Π΅Π½ΠΎ 5 ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ. ΠΠΎΠΈΡΠΊ Π±Π΅Π· ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π·Π°Π½ΡΠ» 0.11 ΡΠ΅ΠΊΡΠ½Π΄ ΠΠ°ΠΉΠ΄Π΅Π½ΠΎ 5 ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΉ. ΠΠΎΠΈΡΠΊ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ Π·Π°Π½ΡΠ» 0.07 ΡΠ΅ΠΊΡΠ½Π΄
ΠΡΠ»ΠΈΡΠ½ΠΎ! ΠΡ ΠΎΡΠ²ΠΎΠΈΠ»ΠΈ Π²ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠΌΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ.
ΠΡ ΡΠΌΠ΅Π΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ findall
, sub
ΠΈ search
, ΠΈ Π΄Π°ΠΆΠ΅ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΡΠΊΠΎΡΠΈΡΡ ΠΈΡ
ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ re.compile
.
ΠΠΎ Π½Π°ΡΡΠΎΡΡΠ°Ρ ΡΠΈΠ»Π° Regex β Π² ΡΠΌΠ΅Π½ΠΈΠΈ ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅, Π΄Π°ΠΆΠ΅ ΡΠ°ΠΌΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ. ΠΠΎΡΠΎΠ²Ρ ΡΡΠ°ΡΡ ΡΠ΅ΠΌ, ΠΊΡΠΎ Π½Π΅ ΠΈΡΠ΅Ρ ΠΈΡ Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅, Π° ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°ΠΌ? Π ΠΏΠΎΠ»Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΡΠΎΠΊΠ° Π²Π°Ρ ΠΆΠ΄ΡΡ:
- ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΌΠ΅ΡΠ°ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΠΌ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Regex-ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π»ΡΠ±ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ.
- ΠΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π³ΡΡΠΏΠΏΡ, ΡΠ»Π°Π³ΠΈ ΠΈ ΠΌΠΎΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ΅ΠΆΠ°ΡΡΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ (lookarounds).
- 10 ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π΄Π°Ρ, Π³Π΄Π΅ Π²Ρ Ρ Π½ΡΠ»Ρ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π°, Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ ΡΠ΅ΠΊΡΡΠ°.