python - 如何从 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 ->
你好:第二个 无 无
解决方案
您可以使用 3 个组并将第二组设为可选。您可以在匹配换行符后省略re.DOTALL
and 来匹配 0 个或多个空格字符。\s*
(Hi there:)\r?\n\s*(?:(Hello:)\r?\n\s*)?(welcome:)
例如,在代码中,您可以检查第 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))
推荐阅读
- javascript - 如何实现页面计数器?
- powershell - Powershell - 日志文件
- ruby-on-rails - Rails 与搜索的关联
- ios - 基本用户的 Vimeo 上传权限,可以将视频上传到他们的帐户
- xamarin - 如何将谷歌支付集成到我的安卓应用中进行支付
- forms - 表单操作将我转发到显示 JSON (JavaScript) 的另一个页面
- php - 仅在 WooCommerce 中替换管理单订单页面上的标题文本
- javascript - 输入元素如何检查字符串是否匹配模式属性中指定的正则表达式?
- julia - 我可以将关键字 args 传递给 julia 中的 do-blocks 吗?
- javascript - ENOENT:运行 fs.readFile 时没有这样的文件或目录