Вывести строку, если между "-" и "-" - PullRequest
1 голос
/ 19 июня 2019

У меня есть текстовый файл с несколькими строками между '-', и я пытаюсь напечатать каждую строку между '-'

Я пробовал этот код, но он пропускает значения.

import re

text=   """
        -text1-text2-text3
        -text4-
        """

result = re.findall(r'-(.*?)-', text)
print(result,end="")

Я пытаюсь получить такой результат:

['text1', 'text2', 'text3'], 'text4']

но вместо этого мой код пропускает значения и дает мне следующее:

['text1', 'text4']

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Попробуйте это простое регулярное выражение r'(?<=-)[^-]*(?=-)'

>>> import re
>>> text=   """
...         -text1-text2-text3
...         -text4-
...         """
>>> print ([x.strip() for x in re.findall(r'(?<=-)[^-]*(?=-)', text)])
['text1', 'text2', 'text3', 'text4']
0 голосов
/ 19 июня 2019

Вы можете использовать

-\s*(.*?)(?=\s*-)

См. Демоверсию регулярных выражений и график регулярных выражений :

enter image description here

См. Демонстрационную версию Python :

import re
text=   """
        -text1-text2-text3
        -text4-
        """
result = re.findall(r'-\s*(.*?)(?=\s*-)', text)
print(result) # => ['text1', 'text2', 'text3', 'text4']

Если вам нужно сопоставить строки, добавьте флаг re.S или re.DOTALL к re.findall.

Regex details

  • - - дефис
  • \s* - 0+ пробелов
  • (.*?) - Группа захвата 1: любые 0+ символов, кроме символов разрыва строки
  • (?=\s*-) - положительный прогноз, требующий 0+ пробелов и затем - сразу справа от текущего местоположения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...