我有这样的字符串:
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
我有数亿个这样的字符串。什么是最好,最有效,最快速的方法?你能举个例子吗?
谢谢,
答案 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]))