Ваше регулярное выражение [[.]*?([0-9]+/[0-9]+)]*
неверно, так как вы использовали [
и ]
, который используется для классов символов, и все, что вы в него включаете, рассматривается как набор символов.
Как я вижуВы хотите найти все паттерны, имеющие одну или несколько цифр, за которыми следует косая черта, а затем снова одна или несколько цифр, поэтому вы можете использовать это регулярное выражение и вам не нужно циклически просматривать все результаты, вместо этого вы можете просто использовать findall
функция в re
модуле
\d+/\d+
Демонстрация
Пример кода Python,
import re
some_string = 'perhaps here also 19/4986 something else 5/4 somehting else 7/4 and here'
output = re.findall(r'\d+/\d+',some_string)
print(output)
Печать,
['19/4986', '5/4', '7/4']
Также, если вы хотите найти и выполнить итерацию всех совпадений вручную, вы можете использовать функцию finditer
.Вот пример кода, демонстрирующий использование функции finditer
в модуле re
,
import re
some_string = 'perhaps here also 19/4986 something else 5/4 somehting else 7/4 and here'
for m in re.finditer(r'\d+/\d+',some_string):
print(m.group())
Prints,
19/4986
5/4
7/4
Как видите, разница между findall
иfinditer
, findall
- это удобная функция для захвата всех совпадений через одну строку кода в виде массива совпадающих строк, если есть одна группа захвата или нет группы захвата (в этом случае все совпадения), и если есть большечем одна группа захвата в регулярном выражении, то findall
возвращает массив кортежей всех соответствующих групп в регулярном выражении.
Где, как finditer
возвращает объект сопоставления, что дает вам больше гибкости для доступа к любому изгруппы захвата, как вы хотите, но для этого вам нужно написать немного больше кода для доступа к любой информации, которую вы хотите.Поэтому используйте тот, который удобен и соответствует вашим потребностям.
Дайте мне знать по любым вопросам.