首页 > 解决方案 > 如何从 Python regexp 中的可选组中获取数据?

问题描述

数据1

你好: 第一

你好:

欢迎: 第三

数据 2

你好: 第一

欢迎: 第三

我的意图是编写一个正则表达式代码来获取上述粗体文本。在 data2 Hello:中丢失。如何在单个正则表达式中处理它?

我的代码是

import re

mat = re.search(r"Hi there:\n(.*)\n(Hello:\n(.*))?\nwelcome:\n(.*)", data1, re.DOTALL)
print(mat)
print(mat.group(1))
print(mat.group(2))
print(mat.group(3))

我得到的输出:

<_sre.SRE_Match object at 0x10694aca8>
first   -> 

你好:第二个 无 无

标签: pythonregexregex-groupregex-greedy

解决方案


您可以使用 3 个组并将第二组设为可选。您可以在匹配换行符后省略re.DOTALLand 来匹配 0 个或多个空格字符。\s*

(Hi there:)\r?\n\s*(?:(Hello:)\r?\n\s*)?(welcome:)

正则表达式演示| Python 演示

例如,在代码中,您可以检查第 2 组是否不是 None

import re

regex = r"(Hi there:)\r?\n\s*(?:(Hello:)\r?\n\s*)?(welcome:)"

data1 = ("Hi there:\n\n"
    "Hello:\n\n"
    "welcome:")

mat = re.search(regex, data1)

if mat:
    print(mat.group(1))
    if mat.group(2) is not None:
        print(mat.group(2))
    print(mat.group(3))

推荐阅读