Анализирам xml данни с Python, xml файлът съдържа url адреси и както знаете url не може да бъде анализиран директно чрез регулярен израз, защото форматът им не пасва, има знаци, които блокират анализирането като '?', '$' , '@'. Ето защо използвам функцията urllib.quote от модула urllib и тя работи добре, с изключение на един url и просто не мога да обясня това.
Преди urllib.quote URL адресът изглежда така:
https://randomurl.fr/?oslc_cm.properties=FORM_item
След функцията става така:
https%3A//randomurl.fr/?oslc_cm.properties=FORM_item
Така че ":" се коригира, но "?" и "=" остават както са, което блокира анализирането. Това, което намирам за странно е, че това е единственият url, за който не работи, за останалите 30 един, който също съдържа "?" просто го превръща в "%3F", "=" в "%3D". Опитах се да променя мястото му в xml файла, но все още този точен URL адрес не се цитира добре. Въпреки това забелязах, че ако промених FORM_item с FORM_productCmt, което е собственост на друг съществуващ URL адрес, тогава той го цитира добре. Изглежда ми доста случайно и не мога да разбера какво се случва.
Някой вижда ли грешката тук?
РЕДАКТИРАНЕ
Не мога да избягам от знаците, защото извличам xml файл и го анализирам. Ето кода, който използвам, за да цитирам URL адресите:
def genElementList(self, xmldata):
xmldata_encoded = xmldata
p = re.compile(r'"(http.*?)"')
urls = p.findall(xmldata)
for url in urls:
xmldata_encoded = str.replace(xmldata_encoded, url, urllib.quote(url))
print xmldata_encoded + '\n'
И за всеки url мога да видя, че функцията работи с изключение на един, винаги един и същ. Сравних го с други URL адреси, които са правилно цитирани и те са напълно сходни с изключение на частта „properties=FORM_item“, където друга би била „properties=FORM_productCmt“. Ето защо не мога да разбера как не може да работи.
?
или$
. Просто ако искате да включите такива символи в регулярен израз, трябва да ги екранирате. - person user2357112 supports Monica   schedule 11.12.2013print repr(the_troublesome_string)
и ни покажете какво получавате. - person user2357112 supports Monica   schedule 11.12.2013re.escape
, а неurllib.quote
. - person Corley Brigman   schedule 11.12.2013