2015-03-02 2 views
2

Я собираюсь написать регулярное выражение, чтобы извлечь подстроки. строка:python regex Как избежать совпадения нескольких точек с запятой?

ASP.NET_SessionId=frffcjcarie4dhxouz5yklwu;+BIGipServercapitaliq-ssl=3617221783.36895.0000;+ObSSOCookie=wkyQfn2Cyx2%2f7kSj4zBB886WaLs92Ord9FSf64c%2byHFOBwgEP4f3UmorDj051suQwRXAKEwBtYVKRYJuUGh2YNZtAj2%2bNp8asLIT9xQPqVktEAzkl3jNIv8MyWFsoFPDtm%2fTm1FeaCP%2bGTk9Oa%2fCNA0Hmy847qK2qo7%2bbziV%2bjeClbkGjAX3pgcPzfs%2bQp7p9BSjP1xJqUaUKwJ2%2flIgzZL5Ma%2bnJK8j%2b732ixNyIDNDGo7uIF%2b;+machineIdCookie=866873600;+userLoggedIn=jga;sdgjefdfdfs 

Персонал, которого я хочу извлечь, это только «ObSSOCookie = ....;» перед «userLoggedIn» причина в том, что это информация о сеансе, о которой я забочусь и полезен.

Дело в том, я могу установить регулярное выражение шаблон

pattern = "ObSSOCookie=.*;" 

Но он продолжает извлекать, который включает в себя «+ machineIdCookie = 866873600» Что-то я хочу отказаться. Кажется, что есть ';' в моем регулярном выражении он продолжает извлекаться, пока не найдет. Есть ли способ, чтобы просто извлечь первый? И я не могу просто использовать «split» by «;» причиной этого регулярное выражение на самом деле будет использоваться в файле конфигурации «Logstash» и нет никакого способа, чтобы использовать кодирование питона стиля там ...

Благодаря

ответ

0

Почему просто не захватить ничего, кроме следующего ;, как это (demo)

ObSSOCookie=([^;]*) 


>>> import re 
>>> data = 'ASP.NET_SessionId=frffcjcarie4dhxouz5yklwu;+BIGipServercapitaliq-ssl=3617221783.36895.0000;+ObSSOCookie=wkyQfn2Cyx2%2f7kSj4zBB886WaLs92Ord9FSf64c%2byHFOBwgEP4f3UmorDj051suQwRXAKEwBtYVKRYJuUGh2YNZtAj2%2bNp8asLIT9xQPqVktEAzkl3jNIv8MyWFsoFPDtm%2fTm1FeaCP%2bGTk9Oa%2fCNA0Hmy847qK2qo7%2bbziV%2bjeClbkGjAX3pgcPzfs%2bQp7p9BSjP1xJqUaUKwJ2%2flIgzZL5Ma%2bnJK8j%2b732ixNyIDNDGo7uIF%2b;+machineIdCookie=866873600;+userLoggedIn=jga;sdgjefdfdfs' 
>>> p = re.compile('ObSSOCookie=([^;]*)') 
>>> m = p.search(data) 
>>> m.group(1) 
'wkyQfn2Cyx2%2f7kSj4zBB886WaLs92Ord9FSf64c%2byHFOBwgEP4f3UmorDj051suQwRXAKEwBtYVKRYJuUGh2YNZtAj2%2bNp8asLIT9xQPqVktEAzkl3jNIv8MyWFsoFPDtm%2fTm1FeaCP%2bGTk9Oa%2fCNA0Hmy847qK2qo7%2bbziV%2bjeClbkGjAX3pgcPzfs%2bQp7p9BSjP1xJqUaUKwJ2%2flIgzZL5Ma%2bnJK8j%2b732ixNyIDNDGo7uIF%2b' 
+0

спас мою жизнь, спасибо – JudyJiang

+0

@JudyJiang дать этому человеку +1;) – Agostino

1

Вы хотите, чтобы ваше регулярное выражение не жадный

Вместо того, чтобы использовать эту

* - zero or more 

Используйте этот

*? - zero or more (non-greedy) 

Вот ваше выражение (demo).

ObSSOCookie=(.*?;) 

Это общая методика, также описана в this answer.

Смежные вопросы