import re
s= '''new File()
new
File()
there is a new File()
new
File()
there is not a matching pattern here File() new
new File() test new File() occurs twice on this line
'''
pattern = r'new\s +File\s *\( \s *\) '
for m in re .finditer ( pattern, s) :
linenums = [ s[ :m.start ( ) ] .count ( '\n ' ) + 1 ]
for _ in range ( m.group ( ) .count ( '\n ' ) ) :
linenums.append ( linenums[ -1 ] + 1 )
print ( '{} Found on line {}' .format ( re .sub ( r'\s +' , ' ' , m.group ( ) ) , ", " .join ( map ( str , linenums) ) ) )
aW1wb3J0IHJlCnM9JycnbmV3IEZpbGUoKQpuZXcKRmlsZSgpCnRoZXJlIGlzIGEgbmV3IEZpbGUoKQpuZXcKICAgIAogICAgCiAgICAKRmlsZSgpCnRoZXJlIGlzIG5vdCBhIG1hdGNoaW5nIHBhdHRlcm4gaGVyZSBGaWxlKCkgbmV3Cm5ldyBGaWxlKCkgdGVzdCBuZXcgRmlsZSgpIG9jY3VycyB0d2ljZSBvbiB0aGlzIGxpbmUKJycnCnBhdHRlcm4gPSByJ25ld1xzK0ZpbGVccypcKFxzKlwpJwpmb3IgbSBpbiByZS5maW5kaXRlcihwYXR0ZXJuLCBzKToKCWxpbmVudW1zID0gW3NbOm0uc3RhcnQoKV0uY291bnQoJ1xuJykgKyAxXQoJZm9yIF8gaW4gcmFuZ2UobS5ncm91cCgpLmNvdW50KCdcbicpKToKCQlsaW5lbnVtcy5hcHBlbmQobGluZW51bXNbLTFdICsgMSkKCXByaW50KCd7fSBGb3VuZCBvbiBsaW5lIHt9Jy5mb3JtYXQocmUuc3ViKHInXHMrJywgJyAnLCBtLmdyb3VwKCkpLCAiLCAiLmpvaW4obWFwKHN0cixsaW5lbnVtcykpKSk=