I've tried the exact same code and I have a match for both cases:
python3.4:
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> pattern = r".*W([0-9]+(\.5)?)[^\.]?.*$"
>>> string1 = '6013-SFR6W4.5'
>>> print(re.match(pattern, string1))
<_sre.SRE_Match object; span=(0, 13), match='6013-SFR6W4.5'>
>>> string2 = '6013-SFR6W4.5L'
>>> print(re.match(pattern, string2))
<_sre.SRE_Match object; span=(0, 14), match='6013-SFR6W4.5L'>
python 2.7:
Python 2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> pattern = r".*W([0-9]+(\.5)?)[^\.]?.*$"
>>> string1 = '6013-SFR6W4.5'
>>> print(re.match(pattern, string1))
<_sre.SRE_Match object at 0x10abf83e8>
>>> string2 = '6013-SFR6W4.5L'
>>> print(re.match(pattern, string2))
<_sre.SRE_Match object at 0x10abf83e8>
Try use pattern = r"^.*W([0-9]+(\.5)?)[^\.]?.*$", with ^at the beginning.
python --version?pattern = r"^.*W([0-9]+(\.5)?)[^\.]?.*$"? Do you still getNone?^at the beginning ofpatterndefinition.