0D
ファイル内のすべての行を、15 桁で始まるか、 15Characters
桁だけで一致させたいと考えています。これどうやってするの
p_number = re.compile(r'(\d{15})')
f=open(infile)
for l in f:
aa=re.findall(p_number,l)
if aa > 0:
print aa
f.close()
EDIT
パターンのみが行頭にある場合。
0D
ファイル内のすべての行を、15 桁で始まるか、 15Characters
桁だけで一致させたいと考えています。これどうやってするの
p_number = re.compile(r'(\d{15})')
f=open(infile)
for l in f:
aa=re.findall(p_number,l)
if aa > 0:
print aa
f.close()
EDIT
パターンのみが行頭にある場合。
行頭のみで一致を検索するには、 を使用しますre.match
。この正規表現は、0D
プレフィックスが存在する場合、空白以外のすべての文字に一致します。一致する文字数を減らしたい場合は、お知らせください。
>>> p_number = re.compile(r'(0D[\S]{13}|\d{15})')
>>> for s in ['0Dfannawhoopowe foo',
'foo 012345678901234',
'012345678901234 foo']:
... match = p_number.match(s)
... if match:
... print match.groups()
...
('0Dfannawhoopowe',)
('012345678901234',)
match
、search
、およびの違いfindall
については、次の例を参照してください。
findall
(当然のことながら)一致するすべての出現を見つけます:
>>> for s in ['0Dfannawhoopowe foo',
'foo 012345678901234',
'012345678901234 foo']:
... match = p_number.findall(s)
... if match:
... print match
...
['0Dfannawhoopowe']
['012345678901234']
['012345678901234']
search
先頭だけでなく、文字列内の任意の場所で文字列の出現を検索します。
>>> for s in ['0Dfannawhoopowe foo',
'foo 012345678901234',
'012345678901234 foo']:
... match = p_number.search(s)
... if match:
... print match.groups()
...
('0Dfannawhoopowe',)
('012345678901234',)
('012345678901234',)
import re
with open(infile) as f:
print re.findall('^(0D.{15}|\d{15})$',f.read(),re.MULTILINE)
正規表現でこれを行いたい場合は、もちろん実行できます。
with open(infile) as f:
for l in f:
if re.match('(0D)?[0-9]{15}', l):
print l
ただし、正規表現をまったく使用せずにタスクを解決できます。
with open(infile) as f:
for l in f:
if (len(l) == 15 and l.is_digit()) or (l[:2]='0D' and len(l)==17 and l[2:].is_digit()):
print l