python重新匹配文件中的字符串

时间:2012-07-03 12:07:40

标签: python

我希望匹配文件中的所有行,以0D开头并且有15 Characters或只有15位数。我该怎么做

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

如果只有模式在行的开头。

3 个答案:

答案 0 :(得分:4)

要在该行的开头找到的匹配项,请使用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',)

要了解matchsearchfindall之间的区别,请参阅以下示例。

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',)

答案 1 :(得分:4)

import re
with open(infile) as f:
 print re.findall('^(0D.{15}|\d{15})$',f.read(),re.MULTILINE)

答案 2 :(得分:2)

如果你想用正则表达式做这个,当然你可以这样做:

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