我有一个由混合mp3信息组成的字符串,我必须尝试与由任意字符串和令牌组成的模式进行匹配。它是这样工作的:
the Beatles_Abbey_Road-SomeWord-1969
the %Artist_%Album-SomeWord-%Year
2 possible matches found :
[1] {'Artist': 'Beatles', 'Album':'Abbey_Road', 'Year':1969}
[2] {'Artist': 'Beatles_Abbey', 'Album':'Road', 'Year':1969}
作为一个例子,假设pattern是艺术家姓名后跟标题(分隔符:'-')。在
例1:
>>> artist = 'Bob Marley'
>>> title = 'Concrete Jungle'
>>> re.findall(r'(.+)-(.+)', '%s-%s' % (artist,title))
[('Bob Marley', 'Concrete Jungle')]
到目前为止,还不错。但是…
我无法控制所使用的分隔符,也无法保证它不在标记中,因此存在更棘手的情况:
例2:
^{pr2}$正如预期的那样,在这种情况下,它不起作用。在
如何生成所有可能的艺术家/头衔组合?
[('Bob', 'Marley-Roots-Rock-Reggae'),
('Bob-Marley', 'Roots-Rock-Reggae')
('Bob-Marley-Roots', 'Rock-Reggae'),
('Bob-Marley-Roots-Rock', 'Reggae')]
regex是用于该工作的工具吗?在
请记住,要匹配的标记数和这些标记之间的分隔符不是固定的,而是用户定义的(因此要使用的正则表达式必须是动态构建的)。
我试着用贪婪与最小匹配的断言进行实验,但没有成功。在
谢谢你的帮助
这个解决方案似乎有效。除了正则表达式之外,还需要一个元组列表来描述模式,其中每个元素对应于正则表达式的一个捕获组。在
以披头士乐队为例,应该是这样的:
因为}只由一个分隔符拆分,所以它们将被捕获到一个组中。列表中的第一项指示第一个捕获组将被拆分为和
^{pr2}$Artist
和{Artist
和Album
,并将使用_
作为分隔符。列表中的第二项指示第二个捕获组将直接用作Year
,因为元组中的第二个元素是None
。然后可以像这样调用函数:代码如下:
另一个例子是Bob Marley:
用这种方法代替正则表达式怎么样?在
^{pr2}$相关问题 更多 >
编程相关推荐