【发布时间】:2015-11-21 04:57:14
【问题描述】:
我在 Python 中编写了一个正则表达式,它应该搜索 season/s 和 episode/e 后跟一个数字。正如您在我的代码中看到的那样,我支持各种寻找我想要的模式。
import re
episode = re.compile(r"""(?:s|season)(?:\s)(\d+)(?:e|x|episode|\n)(?:\s)(\d+)| # s 01e 02
(?:s|season)(\d+)(?:e|x|episode|\n)(?:\s)(\d+)| # s01e 02
(?:s|season)(?:\s)(\d+)(?:e|x|episode|\n)(\d+)| # s 01e02
(?:s|season)(\d+)(?:e|x|episode|\n)(\d+)| # s01e02
(?:s|season)(\d+)(?:.*)(?:e|x|episode|\n)(\d+)| # s01 random123 e02
(?:s|season)(?:\s)(\d+)(?:.*)(?:e|x|episode|\n)(?:\s)(\d+)| # s 01 random123 e 02
(?:s|season)(?:\s)(\d+)(?:.*)(?:e|x|episode|\n)(\d+)| # s 01 random123 e02
(?:s|season)(\d+)(?:.*)(?:e|x|episode|\n)(?:\s)(\d+) # s01 random123 e 02
""", re.VERBOSE)
test="Hello seinfeld season 01episode 22 foo bar"
match = re.search(episode, test)
print match.group(1), match.group(2)
以下代码将按预期输出01 22。
但是如果test 字符串是这样的:
test="Hello seinfeld season 01 episode 22 foo bar"
我怎样才能知道要使用哪个组?这意味着我不知道test 有什么价值。
编辑:也许我可以检查所有组的价值,如果确实如此,请使用该特定组。但这似乎是一种错误的做法。
【问题讨论】:
-
r"""\s*season\s*(\d+)\s*(?:e|x|episode)\s*(\d+)""" 适用于示例测试提供的字符串等等。请为所有需要扩展的案例提供一组测试字符串。
标签: python regex regex-group