gpt4 book ai didi

python - 漫画书标题的可选正则表达式组(python)

转载 作者:太空宇宙 更新时间:2023-11-04 06:14:05 24 4
gpt4 key购买 nike

我正在尝试从内容各异的多本漫画书中提取相关信息。然而,只有大约 5 或 6 种不同的模式被遵循:

例子是:

Green Lantern #21

Green Lantern #21 (Variant Cover Edition)

Dejah Thoris & Green Men Of Mars #4 (of 8)

Dejah Thoris & Green Men Of Mars #4 (of 8) (Variant Cover Edition)

Macabre One Shot

Detective Comics #21 Combo Pack

我想分组捕捉:

  1. 标题(唯一需要的组)
  2. 发行编号
  3. 问题总数,例如(共 8 个)
  4. 所有其他信息,例如(不同封面版)或“组合包”

我开始了一个正则表达式搜索字符串的开始,但是我很难让事情可靠地成为可选的,

(?P<name>.*?)\s*?(?P<issue_number>#\d*)\s*?(?P<info>.*)

绝对不完整。任何人都可以给我的任何帮助将不胜感激。

提前致谢!!!

最佳答案

可选组的问题在于正则表达式引擎并不真正寻找它们;它只检查它们是否存在于处理导致的当前位置。

使用 ([^#]+) 捕获标题会将引擎置于正确的位置以匹配问题编号(如果存在)。如果您不想在标题末尾使用空格,请改用 ([^#]*[^#\s])\s*

import re

strings = ['Green Lantern #21',
'Green Lantern #21 (Variant Cover Edition)',
'Dejah Thoris & Green Men Of Mars #4 (of 8)',
'Dejah Thoris & Green Men Of Mars #4 (of 8) (Variant Cover Edition)',
'Macabre One Shot',
'Detective Comics #21 Combo Pack']

for s in strings:
print re.match(r'([^#]*[^#\s])\s*(?:#(\d+)\s*)?(?:\(of (\d+)\)\s*)?(.+)?', s).groups()

打印

('Green Lantern', '21', None, None)
('Green Lantern', '21', None, '(Variant Cover Edition)')
('Dejah Thoris & Green Men Of Mars', '4', '8', None)
('Dejah Thoris & Green Men Of Mars', '4', '8', '(Variant Cover Edition)')
('Macabre One Shot', None, None, None)
('Detective Comics', '21', None, 'Combo Pack')

关于python - 漫画书标题的可选正则表达式组(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16976182/

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