Я просто пытаюсь написать небольшую веб-страницу, которая может анализировать некоторый текст с помощью регулярного выражения и возвращать полученные совпадения в таблицу. Это первый раз, когда я использовал python для веб-разработки, и я должен сказать, что это выглядит грязно.
Мой вопрос: почему я получаю вывод только для последнего совпадения в моем наборе данных? Я полагаю, что это должно быть потому, что вложенные циклы не отформатированы правильно.
Вот данные, которые я предоставляю:
groups - это просто id, соответствующий группе регулярных выражений, и это имя для предоставления заголовка таблицы.
шаблон это что-то вроде:
(\d+)\s(\S+)\s(\S+)$
и данные:
12345 SOME USER
09876 SOMEONE ELSE
54678 ANOTHER USER
Моя простая страница:
<%
import re
pattern = form['pattern']
p = re.compile(pattern)
data = form['data']
matches = p.finditer(data)
lines = form['groups'].split("\n")
groupids ={}
for line in lines:
key, val = line.split(' ')
groupids[int(key.strip())] = val.strip()
%>
<html>
<table style="border-width:1px;border-style:solid;width:60%;">
<tr>
<%
for k,v in groupids.iteritems():%>
<th style="width:30px;text-align:center"><%= v %></th>
<%
# end
%>
</tr>
<%
for match in matches:
#begin
%><tr>
<%
for i in range(1, len(match.groups())+1):
#begin
%>
<td style="border-style:solid;border-width:1px;border-spacing:0px;text-align:center;"><%= match.group(i) %></td>
<%
#end
# end
%>
</tr>
</table>
</html>
Редактировать
Ниже приведен тест, который я провел
Код:
import re
pattern = "(\d\d\d\d\d)\s(\S+)\s(\S+)"
p = re.compile(pattern)
data = """12345 TESTS USERS
34567 TESTS USERS
56789 TESTS USERS"""
groups = """1 PIN
2 FNAME
3 LNAME"""
matches = p.finditer(data)
lines = groups.split("\n")
print lines
groupids ={}
for line in lines:
key, val = line.split(' ')
groupids[int(key.strip())] = val.strip()
for k,v in groupids.iteritems():
print "%s\t" % v,
print ''
for match in matches:
for i in range(1, len(match.groups())+1):
print "%s\t" % match.group(i),
print ''
Вывод:
PIN FNAME LNAME
12345 TESTS USERS
34567 TESTS USERS
56789 TESTS USERS