найти повторяющееся выражение, используя регулярное выражение python

1

Здравствуйте, я пытаюсь получить следующую строку из файла

neighbors= {5 7 9 11 13 14 15 16 17 }

Шаблон {number1 number2... } меняется, некоторые из них короткие, некоторые из них слишком длинны. Я хочу найти такую ​​картину. Моя логика заключается в том, чтобы получить оператор "neighbors= {", за которым следует число и пробел в качестве повторения, пока программа не найдет последние закрытые фигурные скобки. Может ли кто-нибудь помочь мне с синтаксисом?

Спасибо

  • 1
    Что ты пытаешься сделать? И что некоторые из них короткие, а какие слишком длинные ?
  • 0
    Не имеет большого смысла для меня этот вопрос ...
Показать ещё 1 комментарий
Теги:

3 ответа

2

Я думаю, вы ищете это:

import re
FOO = """neighbors= {5 7 9 11 13 14 15 16 17 }"""
match = re.search('(neighbors\s*=\s*\{\s*(\d+\s*)+\})', FOO)
print match.group(1)

Регулярное выражение переносимо, конечно, на многие языки.

Запуск, который дает...

neighbors= {5 7 9 11 13 14 15 16 17 }

Но регулярное выражение будет соответствовать произвольному числу цифр в фигурных скобках.

ИЗМЕНИТЬ

Обозначение с помощью re.findall() и re.compile()...

import re
FOO = """neighbors= {5 7 9 11 13 14 15 16 17 }"""
COMPILE = re.compile('(neighbors\s*=\s*\{\s*(\d+\s*)+\})')
match = re.findall(COMPILE, FOO)
print match[0]

Запуск второго кода возвращается...

neighbors= {5 7 9 11 13 14 15 16 17 }

Хотя вы должны помнить, что .findall() предназначался для нескольких вхождений соответствия регулярных выражений внутри целевой строки. Приведенные примеры не иллюстрируют необходимости .findall()

  • 0
    Спасибо, это определенно работает с функцией re.search. Я могу добавить эти результаты в список. Но могу ли я сделать то же регулярное выражение, которое вы задали (соседям \ s * = \ s * \ {\ s * (\ d + \ s *) + \}), используя функции re.complie и re.findall? Я пытался с findall, но я не получил никакого результата.
  • 0
    @ user690682, если вы используете .findall() помните, что он возвращает список строк вместо объекта re соответствия. Нет проблем с использованием этого регулярного выражения с .compile() или .findall() если вы понимаете конкретные возвращаемые значения, .findall() от каждой функции.
1

Я бы взял всю строку со словом "соседи" в нем, вытащил строку между фигурными скобками, разделил по пробелам, а затем у меня был бы массив строк, который можно преобразовать в целые числа

1

вот о чем вы просили:

neighbors= \{ (\d+ )+\}

делает его более терпимым к некоторым дополнительным пространствам вокруг {} brakets:

neighbors= ?\{ ?(\d+ )+(\}|\d+\})

или более короткий:

neighbors\s*=\s*\{[\d\s]+\}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню