Python Forum

Full Version: Regex error: 'NoneType' object has no attribute 'group'
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello,

In the code below, I receive the error listed in the title of my question.  I'm trying to extract the substring between asterisks: 'Some text**string1;string2;string3**'.  If I change the print statement to print(result.group(1)), I get the correct results (string1;string2;string3), but when I assign it to the variable result as I have in the code and print result, I get the error message.  How do I use .group() correctly during the result variable assignment?


last_validation_comment_lst = validation_comment_lst[-1]
last_validation_comment_string = ''.join(last_validation_comment_lst)
result = re.search('\*\*(.*)\*\*', last_validation_comment_string).group(1)
print(result)
Hello!
Is not the answer to your question but why don't you use the built-in strip()? For me it is a lot easier since '**' are at the both ends of the string.

'**string1;string2;string3**'.strip('**')
It should work the same way.
>>> import re

>>> s = '**string1;string2;string3**'
>>> r = re.search(r'\*\*(.*)\*\*', s)
>>> r.group(1)
'string1;string2;string3'

>>> #Now assign to variable r
>>> r = re.search(r'\*\*(.*)\*\*', s).group(1)
>>> r
'string1;string2;string3'
If there is no match, re.search returns None. So check to make sure there are groups, before trying to get the group.
(Oct-31-2016, 12:18 PM)snippsat Wrote: [ -> ]It should work the same way.
When I assign the variable to r as you have above, I get the error message, but if print r.group(1), I get the intended results??

(Oct-31-2016, 06:35 AM)wavic Wrote: [ -> ]Hello!
Is not the answer to your question but why don't you use the built-in strip()? For me it is a lot easier since '**' are at the both ends of the string.

Actually there is text before the first instance of '**'.  I will adjust my question accordingly.  So its "Some text: **string1;string2;string3**", but the colon is before the first instance so I may be able to start there somehow and then get the intended text??

(Oct-31-2016, 02:23 PM)nilamo Wrote: [ -> ]If there is no match, re.search returns None. So check to make sure there are groups, before trying to get the group.

What's throwing me is if I print(result.group(1)), I get the intended results.  If it's None, why does it print?
(Oct-31-2016, 05:31 PM)DBS Wrote: [ -> ]When I assign the variable to r as you have above, I get the error message, but if print r.group(1), I get the intended results??
With the same code as i post?
Here as a script,tested Python 2 and 3.
import re

s = '**string1;string2;string3**'
r = re.search(r'\*\*(.*)\*\*', s)
print(r.group(1))

#Now assign to variable r
r = re.search(r'\*\*(.*)\*\*', s).group(1)
print(r)
Output:
string1;string2;string3 string1;string2;string3
(Oct-31-2016, 05:54 PM)snippsat Wrote: [ -> ]
(Oct-31-2016, 05:31 PM)DBS Wrote: [ -> ]When I assign the variable to r as you have above, I get the error message, but if print r.group(1), I get the intended results??
With the same code as i post?
Here as a script,tested Python 2 and 3.
import re

s = '**string1;string2;string3**'
r = re.search(r'\*\*(.*)\*\*', s)
print(r.group(1))

#Now assign to variable r
r = re.search(r'\*\*(.*)\*\*', s).group(1)
print(r)
Output:
string1;string2;string3 string1;string2;string3
Same result.  If I print(r.group(1)), I get the correct results, but when I assign .group(1) to r, I get the error message.  Is there a bug or another step I may need to do for decoding or escaping asterisks??
Are you talking about the code i have posted or your code?
Code i have posted should work for you to.
You can test it online here or in >Code on top of this site.
(Oct-31-2016, 06:33 PM)snippsat Wrote: [ -> ]Are you talking about the code i have posted or your code?
Code i have posted should work for you to.
You can test it online here or paste in >Code on top of this site.

I got your code to work (substituting s with my variable and it worked).  There was a loop sitting on top of this and when I assigned .group(1) to the variable outside the loop, everything worked fine.  Thanks!