使用多个分隔符拆分Python字符串

时间:2014-01-14 17:47:58

标签: python regex string tokenize

我在模式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]

然而,解决这种模糊性是次要问题。

1 个答案:

答案 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)