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

标签 python regex

我需要这方面的帮助:

  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/

相关文章:

java - 如何为字符串构建正则表达式?

regex - 正则表达式\d 是否匹配减号和/或小数点?

regex - 在 ReplaceAllStringFunc 回调中获取组值

python - 将文件的部分从匹配行打印到空行

python - 计算在给定映射的情况下可以解码消息的方式的数量

python - 检查Python中函数的参数

python - 在 pandas 的 'for' 循环中从一组 id 切换到另一组 id

python - 如果我不触摸它,为什么多处理会复制我的数据?

正则表达式匹配特殊字符的精确出现

javascript - 在 Javascript 中使用正则表达式格式化电话号码