2012-08-25 184 views
2

我有这个字符串就在这里:正则表达式

*TACK F\u00d6R DIN BOKNING MED RYANAIR*****\r\n------------------------------\r\n\r\nV\u00e4nligen svara inte p\u00e5 detta e-postmeddelande.****\r\n------------------------------\r\n\r\nDITT BOKNINGSNUMMER \u00c4R:* A1A1A1*****\r\n\r\nF\u00d6R ATT F\u00c5 RESA M\u00c5STE DU CHECKA IN VIA INTERNET OCH P\u00c5 FLYGPLATSEN VISA UPP\r\nDITT INTERNETBOARDINGKORT OCH GILTIG ACCEPTERAD RESEHANDLING. PASSAGERARE\r\nSOM INTE VISAR UPP ETT BOARDINGKORT P\u00c5 FLYGPLATSEN KOMMER ATT BLI\r\nDEBITERADE EN STRAFFAVGIFT F\u00d6R NY-UTSKRIFT P\u00c5 EURO40/GBP40.(varje\r\nboardingkort m\u00e5ste vara utskrivet och presenteras p\u00e5 individuella A4-ark).**\r\n**\r\n\r\nDu kan checka in via Internet fr\u00e5n 15 dagar fram till 4 timmar innan\r\nflygets schemalagda avg\u00e5ng.****\r\n\r\nRESEPLAN/KVITTO \u2013 alla tider \u00e4r lokala.****\r\n\r\nUTRESA****\r\n\r\nFr\u00e5n Milano (Bergamo) (BGY) till Stockholm Skavsta (NYO)\r\nSat, 14Aug10 Flyg FR1944 Avg\u00e5ng BGY kl 21:00 och ankomst NYO kl 23:30****\r\n\r\nPASSAGERARE****\r\n\r\n 

而且,我需要“UTRESA”和“PASSAGERARE”之间拉取数据。所以我试过这个:

re.search(r'UTRESA (.+)PASSAGERARE',x) 

由于某种原因,它没有提取数据!你们可以向我解释为什么我不提取数据,并提供解决方案吗?谢谢:)

回答

6

您需要使用DOTALL flag匹配时换行:

re.search(r'UTRESA(.+)PASSAGERARE', x, re.DOTALL) 

和UTRESA后没有空间。

演示:

>>> re.search(r'UTRESA(.+)PASSAGERARE', x, re.DOTALL).groups() 
('****\r\n\r\nFr\\u00e5n Milano (Bergamo) (BGY) till Stockholm Skavsta (NYO)\r\nSat, 14Aug10 Flyg FR1944 Avg\\u00e5ng BGY kl 21:00 och ankomst NYO kl 23:30****\r\n\r\n',) 
+3

我想你的意思're.search(r'UTRESA(+)PASSAGERARE”,X,re.DOTALL。)'。 AFAIK're.MULTILINE'只影响'^'和'$'。 [另外,空间需要去。] – DSM

+0

@DSM:哎呀,从臀部射击那里..谢谢。 –