我在模式s[num][alpha1][alpha2].ext
之后有一个复杂的文件名,我正在尝试将其标记化。绘制alpha1和alpha2的词典包含在两个列表中。
我发现问题https://stackoverflow.com/questions/4998629/python-split-string-with-multiple-delimiters很有用,但它没有解决我的问题。
在[num]
和[alpha1]
之间,一个数字在字母前面(一个相当简单的正则表达式),但在[alpha1]
和[alpha2]
之间,我在两个单词之间分裂。
例如,根据文件名s13LoremIpsum.ext
,我想要("s", "13", "Lorem", "Ipsum")
。
实现这一目标的最佳方法是什么?
请注意,在这种特殊情况下,[alpha2]
是一个字母,但我对两者这种情况的解决方案以及[alpha1]
和{的一般情况感兴趣{1}}是任意长度的单词。还要注意,如果通过组合各个词典中的单词存在多个可能的分裂,一般情况可能会引入歧义,例如
[alpha2]
然而,解决这种模糊性是次要问题。
答案 0 :(得分:3)
alpha1, alpha2 = ["a", "ab", "Lorem"], ["bc", "c", "Ipsum"]
import re
pattern = re.compile("(s)(\\d+)("+"|".join(alpha1) + ")(" + "|".join(alpha2)+")")
data = "s13LoremIpsum.ext"
result = [pattern.match(data).group(i) for i in range(1, 5)]
print result
<强>输出强>
['s', '13', 'Lorem', 'Ipsum']
可以像这样检查实际编译的模式
print pattern.pattern
打印
(s)(\d+)(a|ab|Lorem)(bc|c|Ipsum)