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

2024-06-16 17:34:42 发布

您现在位置: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

我有上亿根这样的弦。什么是最好的、有效的、最快的方法?你能举个例子吗?你知道吗

谢谢你


Tags: 方法okli条件infvncpladv
3条回答

您可以尝试使用findall。例如

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

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

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

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

试试这个:

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'
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]))

相关问题 更多 >