4

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

パターンのみが行頭にある場合。

4

3 に答える 3

7

行頭のみで一致を検索するには、 を使用します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',)

matchsearch、およびの違い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',)
于 2012-07-03T12:15:04.863 に答える
5
import re
with open(infile) as f:
 print re.findall('^(0D.{15}|\d{15})$',f.read(),re.MULTILINE)
于 2012-07-03T12:29:19.690 に答える
3

正規表現でこれを行いたい場合は、もちろん実行できます。

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
于 2012-07-03T12:13:03.340 に答える