s='new File()\nnew\nFile()\nthere is a new File()\nnew\n\n\n\nFile()\nthere is not a matching pattern here File() new\nnew File() test new File() occurs twice on this line'
pattern = r'new\s+File\s*\(\s*\)'
for m inre.finditer(pattern, s):
linenums =[s[:m.start()].count('\n') + 1]
for _ inrange(m.group().count('\n')):
linenums.append(linenums[-1] + 1)
print('{} Found on line {}'.format(re.sub(r'\s+',' ', m.group()),", ".join(map(str,linenums))))
new File() Found on line 1
new File() Found on line 2, 3
new File() Found on line 4
new File() Found on line 5, 6, 7, 8, 9
new File() Found on line 11
new File() Found on line 11