Регулярные выражения в python
Содержание:
- Введение в регулярные выражения
- And now for something completely different
- The search Function
- Как добавить иконку ИКС на сайт
- Компилирование
- Search and Replace
- Special Sequences
- Поиск сопоставлений шаблонов
- Модификаторы регулярных выражений: flags
- Major new features of the 3.9 series, compared to 3.8
- Поиск доменных имен
- Параметры Python’s range()
- Modifying Strings¶
- Методы объекта сопоставления Match:
- Часть 4. Некоторые полезные репозитории GitHub по программированию и машинному обучению
- Как пользоваться ADB run
- Поисковые системы
- группирование
- Не захватывающие группы
Введение в регулярные выражения
Регулярные выражения, также называемые regex, используются практически во всех языках программирования. В python они реализованы в стандартном модуле .
Он широко используется в естественной обработке языка, веб-приложениях, требующих проверки ввода текста (например, адреса электронной почты) и почти во всех проектах в области анализа данных, которые включают в себя интеллектуальную обработку текста.
Эта статья разделена на 2 части.
Прежде чем перейти к синтаксису регулярных выражений, для начала вам лучше понять, как работает модуль .
Итак, сначала вы познакомитесь с 5 основными функциями модуля , а затем посмотрите, как создавать регулярные выражения в python.
Узнаете, как построить практически любой текстовый шаблон, который вам, скорее всего, понадобится при работе над проектами, связанными с поиском текста.
And now for something completely different
trong>Wapcaplet: (John Cleese) Welcome! Do sit down. My name’s Wapcaplet, Adrian Wapcaplet.
Mr. Simpson: how’d’y’do.
Wapcaplet: Now, Mr. Simpson… Now, I understand you want us to advertise your washing powder.
S: String.
W: String, washing powder, what’s the difference. We can sell anything.
S: Good. Well I have this large quantity of string, a hundred and twenty-two thousand miles of it to be exact, which I inherited, and I thought if I advertised it…
W: Of course! A national campaign. Useful stuff, string, no trouble there.
S: Ah, but there’s a snag, you see. Due to bad planning, the hundred and twenty-two thousand miles is in three inch lengths. So it’s not very useful.
W: Well, that’s our selling point! ‘SIMPSON’S INDIVIDUAL STRINGETTES!’
S: What?
W: ‘THE NOW STRING! READY CUT, EASY TO HANDLE, SIMPSON’S INDIVIDUAL EMPEROR STRINGETTES — JUST THE RIGHT LENGTH!’
S: For what?
W: ‘A MILLION HOUSEHOLD USES!’
S: Such as?
W: Uhmm…Tying up very small parcels, attatching notes to pigeons’ legs, uh, destroying household pests…
S: Destroying household pests?! How?
W: Well, if they’re bigger than a mouse, you can strangle them with it, and if they’re smaller than, you flog them to death with it!
S: Well surely!….
W: ‘DESTROY NINETY-NINE PERCENT OF KNOWN HOUSEHOLD PESTS WITH PRE-SLICED, RUSTPROOF, EASY-TO-HANDLE, LOW CALORIE SIMPSON’S INDIVIDUAL EMPEROR STRINGETTES, FREE FROM ARTIFICIAL COLORING, AS USED IN HOSPITALS!’
| Version | Operating System | Description | MD5 Sum | File Size | GPG |
|---|---|---|---|---|---|
| Gzipped source tarball | Source release | e19e75ec81dd04de27797bf3f9d918fd | 26724009 | SIG | |
| XZ compressed source tarball | Source release | 6ebfe157f6e88d9eabfbaf3fa92129f6 | 18866140 | SIG | |
| macOS 64-bit installer | Mac OS X | for OS X 10.9 and later | 16ca86fa3467e75bade26b8a9703c27f | 31132316 | SIG |
| Windows help file | Windows | 9ea6fc676f0fa3b95af3c5b3400120d6 | 8757017 | SIG | |
| Windows x86-64 embeddable zip file | Windows | for AMD64/EM64T/x64 | 60d0d94337ef657c2cca1d3d9a6dd94b | 8387074 | SIG |
| Windows x86-64 executable installer | Windows | for AMD64/EM64T/x64 | b61a33dc28f13b561452f3089c87eb63 | 28158664 | SIG |
| Windows x86-64 web-based installer | Windows | for AMD64/EM64T/x64 | 733df85afb160482c5636ca09b89c4c8 | 1364352 | SIG |
| Windows x86 embeddable zip file | Windows | d81fc534080e10bb4172ad7ae3da5247 | 7553872 | SIG | |
| Windows x86 executable installer | Windows | 4a2812db8ab9f2e522c96c7728cfcccb | 27066912 | SIG | |
| Windows x86 web-based installer | Windows | cdbfa799e6760c13d06d0c2374110aa3 | 1327384 | SIG |
The search Function
This function searches for first occurrence of RE pattern within string with optional flags.
Here is the syntax for this function −
re.search(pattern, string, flags=0)
Here is the description of the parameters −
| Sr.No. | Parameter & Description |
|---|---|
| 1 |
pattern This is the regular expression to be matched. |
| 2 |
string This is the string, which would be searched to match the pattern anywhere in the string. |
| 3 |
flags You can specify different flags using bitwise OR (|). These are modifiers, which are listed in the table below. |
The re.search function returns a match object on success, none on failure. We use group(num) or groups() function of match object to get matched expression.
| Sr.No. | Match Object Methods & Description |
|---|---|
| 1 |
group(num=0) This method returns entire match (or specific subgroup num) |
| 2 |
groups() This method returns all matching subgroups in a tuple (empty if there weren’t any) |
Example
#!/usr/bin/python import re line = "Cats are smarter than dogs"; searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I) if searchObj: print "searchObj.group() : ", searchObj.group() print "searchObj.group(1) : ", searchObj.group(1) print "searchObj.group(2) : ", searchObj.group(2) else: print "Nothing found!!"
When the above code is executed, it produces following result −
searchObj.group() : Cats are smarter than dogs searchObj.group(1) : Cats searchObj.group(2) : smarter
Как добавить иконку ИКС на сайт
Компилирование
Модуль re позволяет вам «компилировать» выражение, которое вы ищите чаще всего. Это также позволит вам превратить выражение в объект SRE_Pattern. Вы можете использовать этот объект в вашей функции поиска в будущем. Давайте используем код из предыдущего примера и изменим его, чтобы использовать компилирование:
Python
import re
text = «The ants go marching one by one»
strings =
for string in strings:
regex = re.compile(string)
match = re.search(regex, text)
if match:
print(‘Found «{}» in «{}»‘.format(string, text))
text_pos = match.span()
print(text)
else:
print(‘Did not find «{}»‘.format(string))
|
1 |
importre text=»The ants go marching one by one» strings=’the’,’one’ forstringinstrings regex=re.compile(string) match=re.search(regex,text) ifmatch print(‘Found «{}» in «{}»‘.format(string,text)) text_pos=match.span() print(textmatch.start()match.end()) else print(‘Did not find «{}»‘.format(string)) |
Обратите внимание на то, что здесь мы создаем объект паттерна, вызывая compile в каждой строке нашего списка, и назначаем результат переменной – регулярному выражению. Далее мы передаем это выражение нашей поисковой функции
Остальная часть кода остается неизменной. Основная причина, по которой используют компилирование это сохранить выражение для повторного использования в вашем коде в будущем. В любом случае, компилирование также принимает флаги, которые могут быть использованы для активации различных специальных функций. Мы рассмотрим это далее.
Обратите внимание: когда вы компилируете паттерны, они автоматически кэшируются, так что если вы не особо используете регулярные выражения в своем коде, тогда вам не обязательно сохранять компилированный объект как переменную.
Search and Replace
One of the most important re methods that use regular expressions is sub.
Syntax
re.sub(pattern, repl, string, max=0)
This method replaces all occurrences of the RE pattern in string with repl, substituting all occurrences unless max provided. This method returns modified string.
Example
#!/usr/bin/python import re phone = "2004-959-559 # This is Phone Number" # Delete Python-style comments num = re.sub(r'#.*$', "", phone) print "Phone Num : ", num # Remove anything other than digits num = re.sub(r'\D', "", phone) print "Phone Num : ", num
When the above code is executed, it produces the following result −
Phone Num : 2004-959-559 Phone Num : 2004959559
Special Sequences
A special sequence is a followed by one of the characters in the list below, and has a special meaning:
| Character | Description | Example | Try it |
|---|---|---|---|
| \A | Returns a match if the specified characters are at the beginning of the string |
«\AThe» | Try it » |
| \b | Returns a match where the specified characters are at the beginning or at the end of a word(the «r» in the beginning is making sure that the string is being treated as a «raw string») |
r»\bain»r»ain\b» | Try it »Try it » |
| \B | Returns a match where the specified characters are present, but NOT at the beginning (or at the end) of a word(the «r» in the beginning is making sure that the string is being treated as a «raw string») |
r»\Bain»r»ain\B» | Try it »Try it » |
| \d | Returns a match where the string contains digits (numbers from 0-9) | «\d» | Try it » |
| \D | Returns a match where the string DOES NOT contain digits | «\D» | Try it » |
| \s | Returns a match where the string contains a white space character | «\s» | Try it » |
| \S | Returns a match where the string DOES NOT contain a white space character | «\S» | Try it » |
| \w | Returns a match where the string contains any word characters (characters from a to Z, digits from 0-9, and the underscore _ character) |
«\w» | Try it » |
| \W | Returns a match where the string DOES NOT contain any word characters | «\W» | Try it » |
| \Z | Returns a match if the specified characters are at the end of the string | «Spain\Z» | Try it » |
Поиск сопоставлений шаблонов
Давайте уделим немного времени тому, чтобы научиться основам сопоставлений шаблонов. Используя Python для поиска шаблона в строке, вы можете использовать функцию поиска также, как мы делали это в предыдущем разделе этой статьи. Вот пример:
Python
import re
text = «The ants go marching one by one»
strings =
for string in strings:
match = re.search(string, text)
if match:
print(‘Found «{}» in «{}»‘.format(string, text))
text_pos = match.span()
print(text)
else:
print(‘Did not find «{}»‘.format(string))
|
1 |
importre text=»The ants go marching one by one» strings=’the’,’one’ forstringinstrings match=re.search(string,text) ifmatch print(‘Found «{}» in «{}»‘.format(string,text)) text_pos=match.span() print(textmatch.start()match.end()) else print(‘Did not find «{}»‘.format(string)) |
В этом примере мы импортируем модуль re и создаем простую строку. Когда мы создаем список из двух строк, которые мы будем искать в главной строке. Далее мы делаем цикл над строками, которые хотим найти и запускаем для них поиск. Если есть совпадения, мы выводим их. В противном случае, мы говорим пользователю, что искомая строка не была найдена.
Существует несколько других функций, которые нужно прояснить в данном примере
Обратите внимание на то, что мы вызываем span. Это дает нам начальную и конечную позицию совпавшей строки
Если вы выведите text_pos, которому мы назначили span, вы получите кортеж на подобие следующего: (21, 24). В качестве альтернативы вы можете просто вызвать методы сопоставления, что мы и сделаем далее. Мы используем начало и конец для того, чтобы взять начальную и конечную позицию сопоставления, это должны быть два числа, которые мы получаем из span.
Модификаторы регулярных выражений: flags
Функции регулярных выражений включают необязательный модификатор для управления изменения условий поиска. Модификаторы задают в необязательном параметре . Несколько модификаторов задают с помощью побитового ИЛИ (), как показано в примерах выше.
| № | Модификатор & Описание |
|---|---|
| 1 | re.I — делает поиск нечувствительным к регистру |
| 2 | re.L — ищет слова в соответствии с текущим языком. Эта интерпретация затрагивает алфавитную группу (\w и \W), а также поведение границы слова (\b и \B). |
| 3 | re.M — символ $ выполняет поиск в конце любой строки текста (не только конце текста) и символ ^ выполняет поиск в начале любой строки текста (не только в начале текста). |
| 4 | re.S — изменяет значение точки (.) на совпадение с любым символом, включая новую строку |
| 5 | re.U— интерпретирует буквы в соответствии с набором символов Unicode. Этот флаг влияет на поведение \w, \W, \b, \B. В python 3+ этот флаг установлен по умолчанию. |
| 6 | re.X— позволяет многострочный синтаксис регулярного выражения. Он игнорирует пробелы внутри паттерна (за исключением пробелов внутри набора [] или при экранировании обратным слешем) и обрабатывает не экранированный “#” как комментарий. |
Major new features of the 3.9 series, compared to 3.8
Some of the new major new features and changes in Python 3.9 are:
- PEP 573, Module State Access from C Extension Methods
- PEP 584, Union Operators in
- PEP 585, Type Hinting Generics In Standard Collections
- PEP 593, Flexible function and variable annotations
- PEP 602, Python adopts a stable annual release cadence
- PEP 614, Relaxing Grammar Restrictions On Decorators
- PEP 615, Support for the IANA Time Zone Database in the Standard Library
- PEP 616, String methods to remove prefixes and suffixes
- PEP 617, New PEG parser for CPython
- BPO 38379, garbage collection does not block on resurrected objects;
- BPO 38692, os.pidfd_open added that allows process management without races and signals;
- BPO 39926, Unicode support updated to version 13.0.0;
- BPO 1635741, when Python is initialized multiple times in the same process, it does not leak memory anymore;
- A number of Python builtins (range, tuple, set, frozenset, list, dict) are now sped up using PEP 590 vectorcall;
- A number of Python modules (_abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref) now use multiphase initialization as defined by PEP 489;
- A number of standard library modules (audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib) are now using the stable ABI defined by PEP 384.
You can find a more comprehensive list in this release’s «What’s New» document.
Поиск доменных имен

Иногда в большом текстовом документе нужно найти телефонные номера, адреса электронной почти или доменные номера.
Возьмем для примера такой текст:
<div class="reflist" style="list-style-type: decimal;"><ol class="references"><li id="cite_note-1"><span class="mw-cite-backlink"><b>^ (http://www.askoxford.com/concise_oed/train?view=uk). <i>(definition – Compact OED)</i>. Oxford University Press<span class="reference-accessdate">. Retrieved 2008-03-18</span>.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fen.wikipedia.org%3ATrain&rft.atitle=Train+%28noun%29&rft.genre=article&rft_id=http%3A%2F%2Fwww.askoxford.com%2Fconcise_oed%2Ftrain%3Fview%3Duk&rft.jtitle=%28definition+%E2%80%93+Compact+OED%29&rft.pub=Oxford+University+Press&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;"> </span></span></span></li><li id="cite_note-2"><span class="mw-cite-backlink"><b>^</b></span> <span class="reference-text"><span class="citation book">Atchison, Topeka and Santa Fe Railway (1948). <i>Rules: Operating Department</i>. p. 7.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fen.wikipedia.org%3ATrain&rft.au=Atchison%2C+Topeka+and+Santa+Fe+Railway&rft.aulast=Atchison%2C+Topeka+and+Santa+Fe+Railway&rft.btitle=Rules%3A+Operating+Department&rft.date=1948&rft.genre=book&rft.pages=7&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></span></li><li id="cite_note-3"><span class="mw-cite-backlink"><b>^ (http://www.hydrogencarsnow.com/blog2/index.php/hydrogen-vehicles/i-hear-the-hydrogen-train-a-comin-its-rolling-round-the-bend/)</span></li><li id="cite_note-4"><span class="mw-cite-backlink"><b>^ (http://www.bnsf.com/media/news/articles/2008/01/2008-01-09a.html)</span></li><li id="cite_note-5"><span class="mw-cite-backlink"><b>^</b></span> <span class="reference-text"><span class="citation book">Central Japan Railway (2006). <i>Central Japan Railway Data Book 2006</i>. p. 16.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fen.wikipedia.org%3ATrain&rft.au=Central+Japan+Railway&rft.aulast=Central+Japan+Railway&rft.btitle=Central+Japan+Railway+Data+Book+2006&rft.date=2006&rft.genre=book&rft.pages=16&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook" class="Z3988"><span style="display:none;"> </span></span></span></li><li id="cite_note-6"><span class="mw-cite-backlink"><b>^ (http://web.archive.org/web/20080620033027/http://www.mrvc.indianrail.gov.in/overview.htm). _Official webpage of Mumbai Railway Vikas Corporation_. Archived from (http://www.mrvc.indianrail.gov.in/overview.htm) on 2008-06-20<span class="reference-accessdate">. Retrieved 2008-12-11</span>.</span><span title="ctx_ver=Z39.88-2004&rfr_id=info%3Asid%2Fen.wikipedia.org%3ATrain&rft.atitle=Overview+Of+the+existing+Mumbai+Suburban+Railway&rft.genre=article&rft_id=http%3A%2F%2Fwww.mrvc.indianrail.gov.in%2Foverview.htm&rft.jtitle=Official+webpage+of+Mumbai+Railway+Vikas+Corporation&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal" class="Z3988"><span style="display:none;"> </span></span></span></li></ol></div>
А нужно найти все основные домены в тексте
Как это сделать?
match=re.findall(r'http(s:|:)\/\/(www.|ww2.|)(*\.\w{2,3})',string)for elem in match: print(elem)--------------------------------------------------------------------(':', 'www.', 'askoxford.com')(':', 'www.', 'hydrogencarsnow.com')(':', 'www.', 'bnsf.com')(':', '', 'web.archive.org')(':', 'www.', 'mrvc.indianrail.gov.in')(':', 'www.', 'mrvc.indianrail.gov.in')
| — здесь это оператор or, который возвращает наборы, содержащие паттерн внутри ().
Параметры Python’s range()
Функция принимает два параметра, например:
stop:
Количество целых чисел для генерации, начиная с нуля. например.
range(3) == .
- start: число начала последовательности.
- stop: генерирует число до данного числа, но не включая его.
- step: разница между каждым числом из последовательности
Обратите внимание,что:
- Все параметры должны быть целыми числами:
- Каждый из параметров может быть как положительным, так и отрицательным.
- range() (и Python в целом) основана на индексе 0, означая, что список индексов начинается с 0, а не 1, например. Синтаксис, предоставляющий доступ к первому элементу в списке — . Поэтому, последнее целое число, сгенерированное функцией зависит от , но не будет включать его. Например, генерирует целые числа 0, 1, 2, 3, 4, но не включая 5.
Modifying Strings¶
Up to this point, we’ve simply performed searches against a static string.
Regular expressions are also commonly used to modify strings in various ways,
using the following pattern methods:
|
Method/Attribute |
Purpose |
|---|---|
|
Split the string into a list, splitting it |
|
|
Find all substrings where the RE matches, and |
|
|
Does the same thing as , but |
Splitting Strings
The method of a pattern splits a string apart
wherever the RE matches, returning a list of the pieces. It’s similar to the
method of strings but provides much more generality in the
delimiters that you can split by; string only supports splitting by
whitespace or by a fixed string. As you’d expect, there’s a module-level
function, too.
- (string, maxsplit=0)
-
Split string by the matches of the regular expression. If capturing
parentheses are used in the RE, then their contents will also be returned as
part of the resulting list. If maxsplit is nonzero, at most maxsplit splits
are performed.
You can limit the number of splits made, by passing a value for maxsplit.
When maxsplit is nonzero, at most maxsplit splits will be made, and the
remainder of the string is returned as the final element of the list. In the
following example, the delimiter is any sequence of non-alphanumeric characters.
>>> p = re.compile(r'\W+')
>>> p.split('This is a test, short and sweet, of split().')
>>> p.split('This is a test, short and sweet, of split().', 3)
Sometimes you’re not only interested in what the text between delimiters is, but
also need to know what the delimiter was. If capturing parentheses are used in
the RE, then their values are also returned as part of the list. Compare the
following calls:
>>> p = re.compile(r'\W+')
>>> p2 = re.compile(r'(\W+)')
>>> p.split('This... is a test.')
>>> p2.split('This... is a test.')
The module-level function adds the RE to be used as the first
argument, but is otherwise the same.
>>> re.split(r'+', 'Words, words, words.') >>> re.split(r'(+)', 'Words, words, words.') >>> re.split(r'+', 'Words, words, words.', 1)
Методы объекта сопоставления Match:
Метод возвращает строку, полученную путем подстановки обратной косой черты в шаблоне строки регулярного выражения, как это сделано методом sub(). Экранированные символы, такие как , преобразуются в соответствующие символы, а числовые обратные ссылки (, ) и именованные обратные ссылки (, ) заменяются содержимым соответствующей группы.
Метод возвращает одну или несколько подгрупп совпадения. При наличии одного аргумента результатом будет одна строка, при наличии нескольких аргументов результатом будет кортеж с одним элементом на аргумент. Без аргументов группа 1 по умолчанию равна нулю — возвращается все совпадение.
- Если аргумент равен нулю, то соответствующее возвращаемое значение является всей соответствующей строкой;
- Если номер группы находится в инклюзивном диапазоне , это строка, соответствующая соответствующей группе скобок.
- Если номер группы отрицателен или больше, чем число групп, определенных в шаблоне, возникает исключение IndexError.
- Если группа содержится в части шаблона, которая не соответствует, то соответствующий результат — .
- Если группа содержится в части шаблона, которая совпала несколько раз, возвращается последнее совпадение.
>>> import re
>>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")
# Совпадение со всем шаблоном
>>> m.group()
# 'Isaac Newton'
# Первая группа
>>> m.group(1)
# 'Isaac'
# Вторая группа
>>> m.group(2)
# 'Newton'
# Можно указывать несколько групп
>>> m.group(1, 2)
# ('Isaac', 'Newton')
Если регулярное выражение использует синтаксис , аргументы также могут быть строками, идентифицирующими группы по имени группы. Если строковый аргумент не используется в качестве имени группы в шаблоне регулярного выражения, возникает исключение IndexError.
Умеренно сложный пример:
>>> import re
>>> m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds")
>>> m.group('first_name')
# 'Malcolm'
>>> m.group('last_name')
# 'Reynolds'
На именованные группы также можно ссылаться по их индексу:
>>> m.group(1) # 'Malcolm' >>> m.group(2) # 'Reynolds'
Если группа совпадает несколько раз, доступно только последнее совпадение:
>>> import re >>> m = re.match(r"(..)+", "a1b2c3") # 3 совпадения шаблона со строкой >>> m.group() # 'a1b2c3' # для извлечения доступно только последнее >>> m.group(1) # 'c3'
Метод идентичен , что позволяет легче получить доступ к отдельной группе из объекта сопоставления:
>>> import re >>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist") # полное совпадение >>> m 'Isaac Newton' # Первая заключенная в скобки подгруппа. >>> m1 # 'Isaac' # Вторая заключенная в скобки подгруппа. >>> m2 # 'Newton'
Метод вернет кортеж, содержащий все подгруппы совпадения, от 1 до любого количества групп в шаблоне. Аргумент используется для групп, которые не смогли захватить какой либо результат при сканировании строки и по умолчанию будут равны .
>>> import re
>>> m = re.match(r"(\d+)\.(\d+)", "24.1632")
>>> m.groups()
# ('24', '1632')
Если сделать десятичную точку и все, что после нее необязательным, то не все группы получат результат захвата. Эти группы по умолчанию будут иметь значение :
>>> import re
>>> m = re.match(r"(\d+)\.?(\d+)?", "24")
# 2 группа по умолчанию None.
>>> m.groups()
# ('24', None)
# теперь 2 группа по умолчанию '0'.
>>> m.groups('0')
# ('24', '0')
Метод возвращает словарь, содержащий все именованные подгруппы совпадения, помеченные именем подгруппы . Аргумент используется для групп, которые не смогли захватить какой либо результат при сканировании строки и по умолчанию будут равны .
>>> import re
>>> m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds")
>>> m.groupdict()
# {'first_name': 'Malcolm', 'last_name': 'Reynolds'}
, :
Методы возвращают индексы начала и конца подстроки совпадающей с группой . По умолчанию группа равна нулю, имеется в виду вся совпадающая подстрока. Методы возвращают , если группа существует, но не смогла захватить какой либо результат. Для объекта сопоставления и группы , которая внесла свой вклад в сопоставление, подстрока, сопоставленная группе эквивалентная , является:
m.stringm.start(g):m.end(g)]
Обратите внимание, что будет равно , если группа соответствует нулевой строке. Например после выполнения , будет равно 1, это 2
и равны 2, а вызывает исключение .
Пример, который удалит из адресов электронной почты:
>>> email = "tony@tiremove_thisger.net"
>>> m = re.search("remove_this", email)
>>> email + emailm.end():]
# 'tony@tiger.net'
Метод вернет двойной кортеж вида
Обратите внимание, что если группа не внесла свой вклад в совпадение, то результатом будет кортеж. По умолчанию группа равна нулю, имеется в виду вся совпадающая подстрока
Часть 4. Некоторые полезные репозитории GitHub по программированию и машинному обучению
- Курс программирования на языке Python, основа сайта introtopython.org.
- «Data science IPython notebooks» — множество качественных тетрадок по основным библиотекам Python для анализа данных — NumPy, SciPy, Pandas, Matplotlib, Scikit-learn. Краткие обзоры Apache Spark и соревнования Kaggle «Titanic: Machine Learning from Disaster».
- Гарвардский курс анализа данных
- «Interactive coding challenges» — подборка основных задач на структуры данных, графы, сортировку, рекурсию и не только. Для многих задач приведены решения и поясняющий материал с картинками.
- Репозиторий Оливье Гризеля (одного из авторов библиотеки Scikit-learn) с обучающими тетрадками IPython. Еще один.
- Тьюториал по Scikit-learn, также от авторов
- Разбор задач курса Andrew Ng «Machine learning» на языке Python
- Материалы в дополнение к книге «Mining the Social Web (2nd Edition)» (Matthew A. Russell, издательство O’Reilly Media)
- Тьюториал по использованию ансамблей для решения задач Kaggle.
- Библиотека XGBoost, которая используется большинством победителей соревнований Kaggle. Там же можно познакомиться с их историями успеха. XGBoost хорош по качеству прогнозирования, эффективно реализован, хорошо параллелится.
- Подборка данных FiveThirtyEight. Просто куча интересных наборов данных.
- Прогнозирование результатов выборов в США. Хороший пример анализа данных с Pandas
Как пользоваться ADB run
Поисковые системы
группирование
Группировка осуществляется с помощью скобок. Вызов возвращает строку , образованную из согласующих скобок подгрупп.
Аргументы могут также быть предоставлена для извлечения конкретной подгруппы.
Из документации :
Если есть единственный аргумент, результат — единственная строка; если имеется несколько аргументов, результатом является кортеж с одним элементом на аргумент.
Вызов , с другой стороны, возвращает список кортежей , содержащих подгруппу.
Не захватывающие группы
Используя создает группу, но группа не улавливается. Это означает, что вы можете использовать его как группу, но это не будет загрязнять ваше «групповое пространство».
Этот пример соответствует или , но не . Это так знак и второй член сгруппированы. С другой стороны, знак не улавливается.


