我需要这方面的帮助:
- 我打开文件,使用 readlines 方法创建一个列表。
我需要找到第一个出现的模式/匹配并将第一个捕获组分配给变量
list = ['firstString','xxxSTATUS=100','thirdString','fourthString'] value = next(x for x in list if [re.search('.*STATUS=(.*)', x)])
如果我按原样将其分配给“value”,我会得到“xxxSTATUS=100”(字符串类型),但是如果我这样做:
value = next(x for x in list if [re.search('.*STATUS=(.*)', x).group(1)])
我得到:
AttributeError: 'NoneType' object has no attribute 'group'
显然我不能做 value.group(1) 因为它是字符串而不是正则表达式对象。我还得到(这是我的假设),在我使用正则表达式模式时,我的变量仍然没有类型,因为它尚未分配。
所以我的问题是如何解决这个问题并分配捕获组,例如。 “100”为变量。有任何解决方法吗?
最佳答案
AttributeError: 'NoneType' object has no attribute 'group'
错误仅意味着您没有匹配项并尝试访问空对象的组内容。
我认为最简单的方法是迭代搜索匹配项的列表项,一旦找到,获取第 1 组内容并将它们分配给 value
:
import re
list = ['firstString','xxxSTATUS=100','thirdString','fourthString']
value = ""
for x in list:
m = re.search('STATUS=(.*)', x)
if m:
value = m.group(1)
break
print(value)
请注意,您不需要模式中的初始 .*
,因为 re.search
模式未锚定在字符串的开头。
请参阅Python demo
此外,如果您希望初始方法起作用,您需要首先使用 if re.search('STATUS=(.*)', x)
检查是否存在匹配项,并且然后再次运行它以获取组内容 re.search('STATUS=(.*)', x).group(1)
:
value = next(re.search('STATUS=(.*)', x).group(1) for x in list if re.search('STATUS=(.*)', x))
关于python - 在下一个方法中使用正则表达式和捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41394614/