Как сопоставить строку cid с регулярным выражением python

#python

#python

Вопрос:

Я хотел бы найти 9A5CA00DCF7842D99534F2F486FB7E5A в

 ...tps://urlshortener.teams.microsoft.com/8D8660148021F90-7-10" style="text-decoration:none"><img height="16" width="14" style="vertical-align:middle; height:16px; width:14px" data-outlook-trace="F:1|T:1" src="cid:9A5CA00DCF7842D99534F2F486FB7E5A"></a></td>
  

Итак, мне нужно регулярное выражение, которое соответствует строке после cid: до тех пор, пока (не включая) «

Заранее большое спасибо!

Ответ №1:

 import re

s = '...tps://urlshortener.teams.microsoft.com/8D8660148021F90-7-10" style="text-decoration:none"><img height="16" width="14" style="vertical-align:middle; height:16px; width:14px" data-outlook-trace="F:1|T:1" src="cid:9A5CA00DCF7842D99534F2F486FB7E5A"></a></td>'

print(re.search(r'cid:([0-9A-F] )', s).group(1))
  

Или:

 print(re.search(r'cid:([^"] )', s).group(1))
  

С принтами:

 9A5CA00DCF7842D99534F2F486FB7E5A
  

Примечание: рекомендуется анализировать HTML с помощью подходящей библиотеки, например beautifulsoup :

 from bs4 import BeautifulSoup

soup = BeautifulSoup(s, 'html.parser')
print(soup.img['src'].split(':')[1])
  

С принтами:

 9A5CA00DCF7842D99534F2F486FB7E5A
  

Комментарии:

1. Хорошо, есть ли менее строгий способ в отношении [0-9A-F], например, «все до первого «?

2. @Niels Вы можете использовать print(re.search(r'cid:([^"] )', s).group(1))

3. Может быть, кто-нибудь знает простой способ замены всех частей src изображений cid на их соответствующую версию в кодировке base64… например, заменить 1-й на изображение A, а 2-й на изображение B

4. @Niels Чтобы не загромождать раздел комментариев, я рекомендую открыть новый вопрос здесь, в StackOverflow (с примером ввода / желаемого вывода).

5. Ах, теперь я понимаю. Atom работает под управлением 2.7 — я подумал, что это достаточно умно, чтобы выбрать последнюю версию. Я удалю свои комментарии и повторно посещу как запустить v3 в Atom. Спасибо

Ответ №2:

 (?:cid:)([^"]*)
  

Используйте группу соответствия 1 из результирующего объекта сопоставления.

Объяснение

Включите больше предшествующих символов в группу без захвата (?:<string>) , если вы видите неправильные результаты сопоставления.

Ответ №3:

 print(re.search(r'src="cid:(w*d*)"', text).group(1)) 
  

Ответ №4:

Без регулярного выражения (при условии, что cid имеет постоянную длину, скажем, 32 в вашем случае)

 print (s[s.find("cid:"):][4:36])