我需要这方面的帮助:
我需要找到第一次出现的patern / match并将第一个捕获组分配给变量
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'对象没有属性'group'
显然我不能做value.group(1),因为它是字符串而不是正则表达式对象。我也得到(这是我的假设),当我使用正则表达式模式时,我的变量仍然没有类型,因为它尚未分配。
所以我的问题是如何解决这个问题并分配捕获组,例如。 '100'变量。有没有解决办法?
答案 0 :(得分:1)
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))