Уровень 1: Компиляция регулярных выражений
детали миссии
Мы многое узнали о регулярных выражениях, так что же такое компиляция регулярных выражений? Эта задача состоит в том, чтобы:
-
Используйте
compile
скомпилированные регулярные выражения; -
Используйте скомпилированные регулярные выражения для сопоставления чисел в строках.
связанная информация
компиляция регулярных выражений
compile
Функция используется для компиляции регулярного выражения и возвращает объект регулярного выражения для использования такими функциями, как match()
, search()
, и findall()
т.д.
Примеры следующие:
import re
str ='1Ab2Cdef3ds5ds548s4ds848we8rt6g46d46df48t6ds6x48g6s'
pattern = re.compile('\D') # 编译正则表达式,匹配不是数字的字符
pattern_Math = pattern.match(str) # 决定RE是否在字符串刚开始的位置匹配。如果满足,则返回一个match对象;如果不满足,返回空
print(pattern_Math) # 返回被RE匹配的字符串
выход:
None
Используются следующие общие шаги re
: сначала скомпилируйте строковую форму регулярного выражения в pattern
экземпляр; затем используйте pattern
экземпляр для обработки текста и получения соответствующего результата ( Match
экземпляр (значение True
)); наконец, используйте Match
экземпляр для получения информации и выполнения других действий. операции. Часто используемые регулярные выражения могут быть скомпилированы в объекты регулярных выражений, тем самым улучшив скорость выполнения программы.
Простая модификация предыдущего кода:
math_Group = pattern.match(str,1,10) # 查找从索引 1 开始 10 结束
print(math_Group.group()) # 返回被RE匹配的字符串
выход:
A
Видно, что результат сопоставления отличается от предыдущего, потому что индекс начинает сопоставляться с 1, а первый символ больше не является числом, поэтому сопоставление успешно. Давайте посмотрим findall()
на использование.
pattern_Find1 = pattern.findall(str) # 找到RE匹配的所有子串,并把它们作为一个列表返回
print(pattern_Find1) # 返回一个列表
выход:
['A', 'b', 'C', 'd', 'e', 'f', 'd', 's', 'd', 's', 's', 'd',
's', 'w', 'e', 'r', 't', 'g', 'd', 'd', 'f', 't', 'd', 's', 'x', 'g',
's']
findall()
Также возможно определить начальную и конечную позиции индекса.
pattern_Find2 = pattern.findall(str,5,10) # 查找从索引 5 开始到 10 结束的所有子串,并把它们作为一个列表返回
print(pattern_Find2)
выход:
['d', 'e', 'f', 'd']
требования к программированию
Begin - End
Пожалуйста, внимательно прочитайте код справа и дополните код в области в соответствии с подсказками в методе Конкретные задачи заключаются в следующем:
-
Используйте
compile
скомпилированные регулярные выражения; -
Соблюдайте правила трех тестовых наборов справа и используйте скомпилированное регулярное выражение для сопоставления чисел в строке.
Инструкция по тестированию
После дополнения кода нажмите «Оценка», и платформа проверит написанный вами код.Если ваш результат соответствует ожидаемому результату, он передается.
Тестовый ввод: 010-12345
Ожидаемый результат:('010', '12345')
实现代码:
импортировать повторно
деф re_telephone (ул):
#*********** Начинать **********#
re_input = '^(\d{3})-(\d{3,8})$'
re_telephone = re.compile (re_input)
re_group = re_telephone.match(str).groups()
#*********** Конец **********#
вернуть re_group
Скриншот кода:
результат операции: