我希望匹配文件中的所有行,以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
如果只有模式在行的开头。
答案 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',)
要了解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',)
答案 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