从python中的复杂字符串中获取特定字符

时间:2016-12-01 11:54:54

标签: python

我有这样的字符串:

ye<V><vn:inf><N><0><V><cpl:pres><3s>
çok<Postp:adv:ablC><0><N><0><V><cpl:pres><3s>
yağ<N><li><Adv><0><N><0><V><cpl:evid><3s>

我想提取;

ye, V, 3s
çok, Postp:adv:ablC, 3s
yağ, N, 3s

我有数亿个这样的字符串。什么是最好,最有效,最快速的方法?你能举个例子吗?

谢谢,

3 个答案:

答案 0 :(得分:5)

试试这个:

l = s.split('<')
'{}, {}, {}'.format(l[0], l[1][:-1], l[-1][:-1])

输出示例:

>>> s = 'ye<V><vn:inf><N><0><V><cpl:pres><3s>'
>>> l = s.split('<')
>>> '{}, {}, {}'.format(l[0], l[1][:-1], l[-1][:-1])
'ye, V, 3s'

答案 1 :(得分:2)

您可以尝试使用findall。例如,

import re
regex = re.compile(r'(?P<g1>3s)|(?P<g2>ye)')
regex.findall(test_string)

这将返回匹配的元组列表,如下所示:

# Output
# [('3s', ''), ('', 'ye'), ('3s', ''), ('', 'ye')]    

我编译的正则表达式没有你想要的所有命名组,但是你可以很容易地添加它们。

答案 2 :(得分:1)

s1 = 'ye<V><vn:inf><N><0><V><cpl:pres><3s>'
s2 = 'çok<Postp:adv:ablC><0><N><0><V><cpl:pres><3s>'
s3 = 'yağ<N><li><Adv><0><N><0><V><cpl:evid><3s>'

if __name__ == '__main__':
    for s in (s1,s2,s3):
        print('{0}, {1}, {2}'.format(s.split('<')[0], s.split('<')[1].split('>')[0], s.split('<')[-1].split('>')[0]))