Форум сайта python.su
import re
string = "AV kjm AV"
pattern = r"AV"
def finds():
global string,pattern
if not pattern in string:
return
print(pattern,string)
result = re.match(pattern, string)
print(result.start())
print(result.end())
string = string.replace(pattern, '' , 1)
finds()
finds()
Отредактировано Snowmaze (Май 24, 2017 10:36:39)
Офлайн
Потому что не хорошо пользоваться глобальными переменными. Передавай строку в функцию как параметр.
Офлайн
RodegastА как это сделать лучше?Я кривой xD
Потому что не хорошо пользоваться глобальными переменными. Передавай строку в функцию как параметр.
Офлайн
import re def finds(string, pattern): .... return result print(finds("AV kjm AV", r"AV"))
Офлайн
RodegastВсё равно выскакивает ошибка
Офлайн
> Всё равно выскакивает ошибка
Код + ошибку в студию!
Офлайн
RodegastAV AV kjm AV
> Всё равно выскакивает ошибкаКод + ошибку в студию!
import re def finds(string,pattern): if not pattern in string: return print(pattern,string) result = re.match(pattern, string) print(result.start()) print(result.end()) string = string.replace(pattern, "" , 1) finds(string,pattern) return result print(finds("AV kjm AV", r"AV"))
Офлайн
Так работает:
import re def finds(string,pattern): if pattern in string: print(pattern,string) result = re.match(pattern, string) print(result.start()) print(result.end()) return string.replace(pattern, "" , 1) print(finds("AV kjm AV", r"AV"))
Отредактировано Rodegast (Май 24, 2017 12:51:20)
Офлайн
RodegastПрикол в том, что он ищет только первые 2 индекса слова. А мне надо все индексы. Поэтому я и вызывал повторно функцию. Но когда вызывается 2 раз поиск выдает None
Так работает:
Офлайн
Это без регилярок делается.
>>> def find(string, arg=None, start=0): ... arg = arg or [] ... dat = string.find(obr, start) ... if dat > -1: ... arg.append((dat, dat+len(obr))) ... return find(string, arg, dat+len(obr)) ... return arg ... >>> find("AV kjm AV") [(0, 2), (7, 9)]
Офлайн