gpt4 book ai didi

python - 在下一个方法中使用正则表达式和捕获组

转载 作者:太空宇宙 更新时间:2023-11-03 15:50:11 25 4
gpt4 key购买 nike

我需要这方面的帮助:

  1. 我打开文件,使用 readlines 方法创建一个列表。
  2. 我需要找到第一个出现的模式/匹配并将第一个捕获组分配给变量

    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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com