python re match string in a file
python
Solution
To find matches only at the beginning of the line, use `re.match`. This regex matches all non-whitespace characters if the `0D` prefix is present; if you want to match fewer characters, let me know.
>>> 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',)
For a sense of the difference between `match`, `search`, and `findall`, see the following examples.
`findall` (naturally) finds all occurrences of the match:
>>> for s in ['0Dfannawhoopowe foo',
'foo 012345678901234',
'012345678901234 foo']:
... match = p_number.findall(s)
... if match:
... print match
...
['0Dfannawhoopowe']
['012345678901234']
['012345678901234']
`search` finds an occurrence of the string anywhere in the string, not just at the beginning.
>>> for s in ['0Dfannawhoopowe foo',
'foo 012345678901234',
'012345678901234 foo']:
... match = p_number.search(s)
... if match:
... print match.groups()
...
('0Dfannawhoopowe',)
('012345678901234',)
('012345678901234',)
Problem
I want to match all the lines in a file either starting with `0D` and has 15 `Characters` or just having 15 digits. How can i do this ``` 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` If only the pattern is in the starting of the line.