Python Forum
Regex error: 'NoneType' object has no attribute 'group' - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Regex error: 'NoneType' object has no attribute 'group' (/thread-712.html)



Regex error: 'NoneType' object has no attribute 'group' - DBS - Oct-31-2016

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)



RE: Regex error: 'NoneType' object has no attribute 'group' - wavic - Oct-31-2016

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('**')



RE: Regex error: 'NoneType' object has no attribute 'group' - snippsat - Oct-31-2016

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'



RE: Regex error: 'NoneType' object has no attribute 'group' - nilamo - Oct-31-2016

If there is no match, re.search returns None. So check to make sure there are groups, before trying to get the group.


RE: Regex error: 'NoneType' object has no attribute 'group' - DBS - Oct-31-2016

(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?


RE: Regex error: 'NoneType' object has no attribute 'group' - snippsat - Oct-31-2016

(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



RE: Regex error: 'NoneType' object has no attribute 'group' - DBS - Oct-31-2016

(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??


RE: Regex error: 'NoneType' object has no attribute 'group' - snippsat - Oct-31-2016

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.


RE: Regex error: 'NoneType' object has no attribute 'group' - DBS - Oct-31-2016

(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!