Проблемы с регулярными выражениями и CSV в Python 2.7 - PullRequest
1 голос
/ 15 ноября 2011

Использовал следующее, чтобы исправить проблемы (для оставшихся проблем изменит мой код).Извините за неправильный формат кода в моем первоначальном посте.

import csv, re, mechanize  

htmlML = br.response().read() 

#escaping ? fixed the regex match 
patMemberName = re.compile('<a href=/foo.php\?XID=(d+) ><font color=#000000><b>(.*) </b>') 
searchMemberName = re.findall(patMemberName,htmlML)

MembersCsv = 'path-to-csv' 
MemberWriter = csv.writer(open(MembersCsv, 'wb')) #adding b fixed the \n in csv

for i in searchMemberName:
    MemberWriter.writerow(i)
    print (i)

Спасибо за ваше время

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Для вопроса 1) вы должны экранировать ? в шаблоне.

import re

htmlML = '<a href=/foo.php?XID=123 ><font color=#000000><b>user</b>'
patMemberID = re.compile('<a href=/foo.php\?XID=(\d*) ><font color=#000000><b>user</b>')

searchMemberID = re.findall(patMemberID, htmlML)
print len(searchMemberID)

for i in searchMemberID:
    print (i)

Тогда 123 можно извлечь из строки

Вопрос 2a)

Вы можете использовать (.*?), чтобы заменить some string, ? мужское не жадное совпадение

0 голосов
/ 15 ноября 2011

К сожалению, я не могу сейчас найти правильную escape-последовательность для Python. Как правило, вы должны заключить выражение в метасимволы, которые не должны интерпретироваться в "\ Q ... \ E".

Попробуйте обернуть вашу строку в re.escape (строка). Итак:

re.compile(re.escape('<font color=#000000><b>(.*)</b>'))
...