#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])