Educoder — компиляция регулярных выражений Python

Уровень 1: Компиляция регулярных выражений

детали миссии

Мы многое узнали о регулярных выражениях, так что же такое компиляция регулярных выражений? Эта задача состоит в том, чтобы:

  1. Используйте compileскомпилированные регулярные выражения;

  2. Используйте скомпилированные регулярные выражения для сопоставления чисел в строках.

связанная информация

компиляция регулярных выражений

compileФункция используется для компиляции регулярного выражения и возвращает объект регулярного выражения для использования такими функциями, как match(), search(), и findall()т.д.

Примеры следующие:

 
 
  1. import re
  2. str ='1Ab2Cdef3ds5ds548s4ds848we8rt6g46d46df48t6ds6x48g6s'
  3. pattern = re.compile('\D') # 编译正则表达式,匹配不是数字的字符
  4. pattern_Math = pattern.match(str) # 决定RE是否在字符串刚开始的位置匹配。如果满足,则返回一个match对象;如果不满足,返回空
  5. print(pattern_Math) # 返回被RE匹配的字符串

выход:

 
 
  1. None

Используются следующие общие шаги re: сначала скомпилируйте строковую форму регулярного выражения в patternэкземпляр; затем используйте patternэкземпляр для обработки текста и получения соответствующего результата ( Matchэкземпляр (значение True)); наконец, используйте Matchэкземпляр для получения информации и выполнения других действий. операции. Часто используемые регулярные выражения могут быть скомпилированы в объекты регулярных выражений, тем самым улучшив скорость выполнения программы.
Простая модификация предыдущего кода:

 
 
  1. math_Group = pattern.match(str,1,10) # 查找从索引 1 开始 10 结束
  2. print(math_Group.group()) # 返回被RE匹配的字符串

выход:

 
 
  1. A

Видно, что результат сопоставления отличается от предыдущего, потому что индекс начинает сопоставляться с 1, а первый символ больше не является числом, поэтому сопоставление успешно. Давайте посмотрим findall()на использование.

 
 
  1. pattern_Find1 = pattern.findall(str) # 找到RE匹配的所有子串,并把它们作为一个列表返回
  2. print(pattern_Find1) # 返回一个列表

выход:

 
 
  1. ['A', 'b', 'C', 'd', 'e', 'f', 'd', 's', 'd', 's', 's', 'd',
  2. 's', 'w', 'e', 'r', 't', 'g', 'd', 'd', 'f', 't', 'd', 's', 'x', 'g',
  3. 's']

findall()Также возможно определить начальную и конечную позиции индекса.

 
 
  1. pattern_Find2 = pattern.findall(str,5,10) # 查找从索引 5 开始到 10 结束的所有子串,并把它们作为一个列表返回
  2. print(pattern_Find2)

выход:

 
 
  1. ['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

Скриншот кода:

результат операции:

 

 

рекомендация

отblog.csdn.net/qq_57409899/article/details/124111193
рекомендация