I understand that re.search returns a match object re.search(pattern, string, flags=0) I am testing the success of the match & then retrieving the string.
# matchTest.py --- testing match object returns
import re
# expected_pattern = suburbRegex
suburbRegex = "(?s)(,_\S+\s)"
# line leading up to and including expected_pattern
mostOfLineRex = "(?s)(^.+,\S+)"
# expected_pattern to end of line
theRestRex = "(?s),_\S+\s\w+\s(.+)"
fileLines = ['173 ANDREWS John Frances 20 Bell_Road,_Sub_urbia Semi Retired\n']
for fileLine in fileLines:
result = re.search(suburbRegex, fileLine)
# print(type(result)) # re.Match
if(result):
patResult = re.search(suburbRegex, fileLine).group(0)
# print(patResult)
# print(type(patResult)) # str
# print(type(re.search(suburbRegex, fileLine).group(0))) # str
start = re.search(mostOfLineRex, fileLine)
if(start):
start = re.search(mostOfLineRex, fileLine).group(0)
# print(start)
print(type(start)) # str
end = re.search(theRestRex, fileLine)
if(end):
end = re.search(theRestRex, fileLine).group(0)
# print(end)
print(type(end)) # str
newFileLine = start + ' ' + end
else:
print("The listing does not have a suburb!")
# File "~\matchTest.py", line 31, in <module>
# newFileLine = start + ' ' + end
# TypeError: can only concatenate str (not "NoneType") to str
I checked that types for start & end are <class 'str'> So why do I get NoneType error?