Python регулярное выражение работает в сети, но не в коде - PullRequest
2 голосов
/ 10 октября 2019

Этот шаблон регулярного выражения: ^.+\'(.+.png) работает в онлайн-редакторах, но не в коде Python. Я видел другие посты, имеющие такую ​​же проблему. Я пытался применить их;

  • Добавление дополнительной косой черты

  • Предварительная начальная цитата с r

регулярное выражениедолжен совпадать начиная с одинарной кавычки, пока не достигнет .png.

Например:

С этой строкой Executing identify -format %k 'testcases/art/test_files/video_images/single-[snk1=640x480p59.9]-[src1=720x480i59.9].png'

Я хочу: testcases/art/test_files/video_images/single-[snk1=640x480p59.9]-[src1=720x480i59.9].png

Я пытался (не в хронологическом порядке):

result = re.findall("^.+\\'(.+\\.png)", self.stream.getvalue()) # I also tried prepending all of these with r
result = re.findall("^.+\'(.+.png)", self.stream.getvalue())
result = re.findall("^.+'(.+.png)", self.stream.getvalue())
result = re.findall("^.+'(.+.png)", str(self.stream.getvalue()))
result = re.findall("\^.+'(.+.png)\", self.stream.getvalue())

Редактировать: я также пытался использовать re.match() и re.search()

Обновление:

Вероятно, где я получаю строку, отвечает cStringIO.StringO.getvalue(), чтоэта часть в коде self.stream.getvalue(). Это код, который я не написал. Как я могу использовать регулярные выражения в этом?

1 Ответ

1 голос
/ 10 октября 2019

Вам необходимо преобразовать вывод self.stream.getvalue() в строку, а также выбросить часть ^.+ шаблона, так как re.findall ищет все совпадения в любом месте входной строки.

Использование

results = re.findall(r"'([^']+\.png)", str(self.stream.getvalue()))

Кроме того, избегайте точек, которые являются буквальными . символами в шаблоне.

Детали шаблона

  • '- одинарная кавычка
  • ([^']+\.png) - Группа захвата 1:
    • [^']+ - 1+ символов, отличных от '
    • \.png - .png подстрока.
...