# Реализовано тут
import re

help(re)

re.match()  # Try to apply the pattern at the start of the string, returning a match object, or None if no match was found.

re.search() # Scan through string looking for a match to the pattern, returning a match object, or None if no match was found.

re.findall() # Return a list of all non-overlapping matches in the string.
re.split() # Split the source string by the occurrences of the pattern, returning a list containing the resulting substrings.
re.sub()  # Return the string obtained by replacing the leftmost non-overlapping occurrences of the pattern in string by the 
          #replacement repl
re.compile() # Чтобы собрать регулярки в отдельный объект

"""
Explanation: Регулярное выражение — это последовательность символов, используемая для поиска и замены текста в строке или файле
Регулярные выражения используют два типа символов:


специальные символы: как следует из названия, у этих символов есть специальные значения. Аналогично символу *, который как правило означает «любой символ» (но в регулярных выражениях работает немного иначе, о чем поговорим ниже);


литералы (например: a, b, 1, 2 и т. д.).
End of explanation
"""


result = re.match('AV', 'AV Analytics Vidhya')
print (result)

print (result.start()) # начало и конец найденной подстроки
print (result.end())

result.group(0) # что именно

result = re.match(r'Analytics', 'AV Analytics Vidhya AV') 
print (result)

"""
Explanation: re.match(pattern, string):
End of explanation
"""


result = re.search(r'AV', 'AV Analytics Vidhya AV')
print (result.group(0))

result

"""
Explanation: re.search(pattern, string):
End of explanation
"""


result = re.findall(r'AV', 'AV Analytics Vidhya AV')

result

"""
Explanation: re.findall(pattern, string):
End of explanation
"""


result = re.split(r'y', 'Analytics')
print (result) 

result = re.split(r'i', 'Analytics Vidhya')
print (result) # все возможные участки.


result = re.split(r'i', 'Analytics Vidhya',maxsplit=1)
print (result)

"""
Explanation: re.split(pattern, string, [maxsplit=0]):
End of explanation
"""


result = re.sub(r'India', 'the World', 'AV is largest Analytics community of India')
print (result)

"""
Explanation: re.sub(pattern, repl, string):
End of explanation
"""


pattern = re.compile('AV')
result = pattern.findall('AV Analytics Vidhya AV')
print (result)

result2 = pattern.findall('AV is largest analytics community of India')
print (result2)

"""
Explanation: re.compile(pattern, repl, string):
End of explanation
"""


import re

c = re.compile(r'[0-9]+?')
str = '32 43 23423424'
print(re.findall(c, str))

# Пример 1. Как получить все числа из строки

price = '324234dfgdg34234DFDJ343'
b = "[a-zA-Z]*" # регулярное выражение для последовательности букв любой длины
nums = re.sub(b,"",price)
print (nums)

"""
Explanation: Определение количества вхождений
End of explanation
"""


#попробуем вытащить каждый символ (используя .)


# в конечный результат не попал пробел

# Теперь вытащим первое слово

# А теперь вытащим первое слово

"""
Explanation: Задача 1
End of explanation
"""


#используя \w, вытащить два последовательных символа, кроме пробельных, из каждого слова


# вытащить два последовательных символа, используя символ границы слова (\b)

"""
Explanation: Задача 2
End of explanation
"""


#Сначала вернем все символы после «@»:

str = 'abc.test@gmail.com, xyz@test.in, test.first@analyticsvidhya.com, first.test@rest.biz 111@asd.ry@@'

#Если части «.com», «.in» и т. д. не попали в результат. Изменим наш код:

# вытащить только домен верхнего уровня, используя группировку — ( )

# Получить список почтовых адресов

"""
Explanation: Задача 3
вернуть список доменов из списка адресов электронной почты
End of explanation
"""


# Извлечь дату из строки

str = 'Amit 34-3456 12-05-2007, XYZ 56-4532 11-11-2011, ABC 67-8945 12-01-2009'

#А теперь только года, с помощью скобок и группировок:    

"""
Explanation: Задача 4:
End of explanation
"""


#Извлечь все слова, начинающиеся на гласную. Но сначала получить все слова (\b - границы слов)

"""
Explanation: Задача 5
End of explanation
"""


li = ['9999999999', '999999-999', '99999x9999']

for val in li:
    print()

"""
Explanation: Задача 6:
Проверить телефонный номер (номер должен быть длиной 10 знаков и начинаться с 8 или 9)
End of explanation
"""


line = 'asdf fjdk;afed,fjek,asdf,foo' # String has multiple delimiters (";",","," ").

"""
Explanation: Задача 7:
Разбить строку по нескольким разделителям
End of explanation
"""


s = '<html><head><title>Title</title>'
print (len(s))

print (re.match('<.*>', s).span())

print (re.match('<.*>', s).group())

print re.match('<.*?>', s).group()

c = re.compile(r'\d+')
str = '0123456789'
tuples = re.findall(c, str)
print(tuples)

#Но как сделать так, чтобы получить каждой отдельное число

"""
Explanation: Жадный против нежадного
End of explanation
"""


#(?=...) - положительный просмотр вперед

s = "textl, text2, textЗ text4"
p = re.compile(r"\w+(?=[,])", re.S | re.I) # все слова, после которых есть запятая
print (p.findall(s))


#(?!...) - отрицательный просмотр вперед
import re
s = "textl, text2, textЗ text4"
p = re.compile(r"[a-z]+[0-9](?![,])", re.S | re.I) # все слова, после которых нет запятой
print(p.findall(s))

#(?<=...) - положительный просмотр назад
import re
s = "textl, text2, textЗ text4"
p = re.compile(r"(?<=[,][ ])([a-z]+[0-9])", re.S | re.I) # все слова, перед которыми есть запятая с пробелм
print (p.findall(s) )

#(?<!...) - отрицательный просмотр назад

s = "textl, text2, textЗ text4"
p = re.compile(r"(?<![,]) ([a-z]+[0-9])", re.S | re.I) # все слова, перед которыми есть пробел но нет запятой
print (p.findall(s))

#Дано текст: 
str = 'ruby python 456 java 789 j2not clash2win'
#Задача: Найти все упоминания языков программирования в строке.
pattern = 'ruby|java|python|c#|fortran|c\+\+'
string = 'ruby python 456 java 789 j2not clash2win'
re.findall(pattern, string)

"""
Explanation: Разное
Просмотр с возращением
End of explanation
"""


