这可能是一个非常明显的错误,因为我对编码很新,但是我正在尝试读取一个特定值的文件,我将通过使用re.search和splice来收集,因为我只知道文本之前和之后。
我遇到了一个令人讨厌的bug。当我使用re.search(r“firstPart(。*?)secondPart”,数据).group(1)它返回
Traceback (most recent call last):
File "<stdin>", line 10, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
这一行存在问题:
englishWord = re.search(r"<i>(.*?)</i>", str(englishWord)).group(1)
如果您阅读了代码,您可以看到我已经创建了一些不必要的行,而不是在re.search函数中写入整个字符串,我将只使用一点,然后在另一个函数中添加或删除文本。这是因为如果我在re.search函数中全部执行它通常不起作用。
可能是最烦人的部分,令人困惑的是,如果我在“englishWord = re.search(r”(。*?)“,str(englishWord))。group( 1)“然后我运行它,它工作,但如果我立即运行所有代码我得到了该错误。知道为什么吗?我怎样才能解决这个问题?谢谢! (我使用的是python 3.6)
我的代码vvv
#!/Library/Frameworks/Python.framework/Versions/3.6/bin/python3
import re
import itertools
with open('Desktop/data.txt', 'r') as myfile:
data=myfile.read().replace('\n', '')
num = 0
for x in itertools.repeat(None, 8):
num = int(num) + 1
if int(num) < 10:
num = '0' + str(num)
firstString = re.search(r"id=\"question_" + num + "_whole_question\" data-sidebar-reference=\"\"> (.*?) <input", data).group(1)
secondString = re.search(r"id=\"question_" + num + "_wol_1\"(.*?) </div>", data).group(1)
secondString = secondString.replace(" name=\"question_" + num + "_wol_1\" onchange=\"has_unsaved_work();\" size=\"10\" type=\"text\" />", "")
finalString = firstString + " _" + secondString
englishWord = re.search(r"(<i><span lang=\"en-US\">(.*?)</span></i>)", finalString)
englishWord = re.search(r"<i>(.*?)</i>", str(englishWord)).group(1)
englishWord = "<i>" + englishWord + "</i>"
finalString = finalString.replace(englishWord, "")
finalString = finalString.replace("()", "")
print (finalString)
答案 0 :(得分:0)
仅在匹配时才调用组。
res = re.search(r"<i>(.*?)</i>", str(englishWord))
# if there is a match
if res:
englishWord = res.group(1)
正如评论中所指出的,re.search
在找不到匹配项时返回None。链接:https://docs.python.org/3/library/re.html#re.search