Well, you are using the .NET method contains. It's easy to get what you want. So,
$line.contains("London")
is case-sensitive but
$line -contains "London"
is not. This may explain it better:
PS C:\> "london".contains("London")
False
PS C:\> "london" -contains "London"
True
Example:
PS C:\> cat c:\temp\a.txt
Londonnn
london
New York
hello
world
PS C:\> $sr = new-object System.io.streamreader(get-item C:\Temp\a.txt)
PS C:\> while ($line = $sr.readline()) { if ($line -contains "London"){ $line} }
london
Update: -Contain would expect 'exact' word regardless of case. You might want to use -match instead for your use case. See the difference:
PS C:\> while ($line = $sr.readline()) { if ($line -match "London"){ $line} }
Londonnn
london