1

正規表現を使用して一部のテキストを解析し、結果の一致をテーブルに返すことができる小さな Web ページを作成しようとしています。これは、私が Web 開発に 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
4

2 に答える 2