gpt4 book ai didi

python - 正则表达式和一系列模式?

转载 作者:太空狗 更新时间:2023-10-30 02:23:51 25 4
gpt4 key购买 nike

有没有办法多次匹配一个模式(e\d\d),将每一个都捕获到一个组中?例如,给定字符串..

blah.s01e24e25

..我希望得到四个组:

1 -> blah
2 -> 01
3 -> 24
4 -> 25

最明显的正则表达式是(在 Python 正则表达式中:

import re
re.match("(\w+).s(\d+)e(\d+)e(\d+)", "blah.s01e24e25").groups()

..但我还想匹配以下任一项:

blah.s01e24
blah.s01e24e25e26

你似乎不能做 (e\d\d)+,或者你可以,但它只捕获最后一次出现:

>>> re.match("(\w+).s(\d+)(e\d\d){2}", "blah.s01e24e25e26").groups()
('blah', '01', 'e25')
>>> re.match("(\w+).s(\d+)(e\d\d){3}", "blah.s01e24e25e26").groups()
('blah', '01', 'e26')

我想在单个正则表达式中执行此操作,因为我有多个模式来匹配电视剧集文件名,并且不想复制每个表达式来处理多个剧集:

\w+\.s(\d+)\.e(\d+) # matches blah.s01e01
\w+\.s(\d+)\.e(\d+)\.e(\d+) # matches blah.s01e01e02
\w+\.s(\d+)\.e(\d+)\.e(\d+)\.e(\d+) # matches blah.s01e01e02e03

\w - \d+x\d+ # matches blah - 01x01
\w - \d+x\d+\d+ # matches blah - 01x01x02
\w - \d+x\d+\d+\d+ # matches blah - 01x01x02x03

..等等许多其他模式。

另一件使事情复杂化的事情 - 我希望将这些正则表达式存储在一个配置文件中,因此不需要使用多个正则表达式和函数调用的解决方案 - 但如果这被证明是不可能的,我将只允许用户添加简单的正则表达式

基本上,有没有办法使用正则表达式捕获重复模式?

最佳答案

分两步进行,第一步找到所有数字,然后将它们拆分:

import re

def get_pieces(s):
# Error checking omitted!
whole_match = re.search(r'\w+\.(s\d+(?:e\d+)+)', s)
return re.findall(r'\d+', whole_match.group(1))

print get_pieces(r"blah.s01e01")
print get_pieces(r"blah.s01e01e02")
print get_pieces(r"blah.s01e01e02e03")

# prints:
# ['01', '01']
# ['01', '01', '02']
# ['01', '01', '02', '03']

关于python - 正则表达式和一系列模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053481/

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