我有一个字符串,我想提取一个子集。这是更大的Python脚本的一部分。
这是字符串:
import re
htmlString = '</dd><dt> Fine, thank you. </dt><dd> Molt bé, gràcies. (<i>mohl behh, GRAH-syuhs</i>)'
我要拉出“Moltbé,gràcies.mohlbehh,GRAH-syuhs ”。为此,我使用re.search
:
SearchStr = '(\<\/dd\>\<dt\>)+ ([\w+\,\.\s]+)([\&\#\d\;]+)(\<\/dt\>\<dd\>)+ ([\w\,\s\w\s\w\?\!\.]+) (\(\<i\>)([\w\s\,\-]+)(\<\/i\>\))'
Result = re.search(SearchStr, htmlString)
print Result.groups()
AttributeError: 'NoneType' object has no attribute 'groups'
由于Result.groups()
不起作用,我想做的提取也不起作用(即Result.group(5)
和Result.group(7)
)。
但我不明白为什么我会收到这个错误?正则表达式在TextWrangler中有效,为什么不在Python中呢?我是Python的初学者。
答案 0 :(得分:40)
您收到AttributeError
,因为您在groups
上呼叫None
,但没有任何方法。
regex.search
返回None
表示正则表达式找不到与提供的字符串模式匹配的任何内容。
使用正则表达式时,最好检查是否匹配:
Result = re.search(SearchStr, htmlString)
if Result:
print Result.groups()
答案 1 :(得分:9)
import re
htmlString = '</dd><dt> Fine, thank you. </dt><dd> Molt bé, gràcies. (<i>mohl behh, GRAH-syuhs</i>)'
SearchStr = '(\<\/dd\>\<dt\>)+ ([\w+\,\.\s]+)([\&\#\d\;]+)(\<\/dt\>\<dd\>)+ ([\w\,\s\w\s\w\?\!\.]+) (\(\<i\>)([\w\s\,\-]+)(\<\/i\>\))'
Result = re.search(SearchStr.decode('utf-8'), htmlString.decode('utf-8'), re.I | re.U)
print Result.groups()
以这种方式工作。表达式包含非拉丁字符,因此通常会失败。您必须解码为Unicode并使用re.U(Unicode)标志。
我也是初学者,我自己也曾多次面对这个问题。
答案 2 :(得分:-2)
import re
your_multicastip = "239.255.666.275"
if([224<=int(x)<240 for x in re.split('\.',re.match(r"^2(?:2[4-9]|3\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d?|0)){3}$",your_multicastip).groups())].count(True)==1):
print("%s is a valid multicast ip address",your_multicastip)
else:
print("%s is not a valid multicast ip address",your_multicastip)
Stacktrace:
Traceback (most recent call last):
File "source_file.py", line 3, in <module>
if([224<=int(x)<240 for x in re.split('\.',re.match(r"^2(?:2[4-9]|3\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d?|0)){3}$",your_multicastip).groups())].count(True)==1):
AttributeError: 'NoneType' object has no attribute 'groups'
我是python初学者,我遇到了“其他”情况的问题。