繁体   English   中英

使用python和regex分割字符串

[英]Split string using python and regex

我有以下csv文件:

NAME   DETAILS
abc    type1: Y, Property: p1,p3 , type2:N
def    type1: Y, Property: p2,p3 , type2:N
ghi    type1: N, Property: p1,p2 , type2:Y
jkl    type1: N, Property: p1,p3 , type2:Y

我想要输出文件为:

NAME type1 Property type2
abc  Y      p1,p3    N
def  Y      p2,p3    N
ghi  N      p1,p2    Y
jkl  N      p1,p3    Y

使用python和正则表达式,如果我基于'拆分Details列,则属性类型将拆分为单独的列。 有什么办法可以应对这种情况?

有很多方法可以做到这一点,但是我会在任何标点符号/空格字符上分割每一行,然后根据您的需要手动重构它:

import re 

t = """abc    type1: Y, Property: p1,p3 , type2:N
def    type1: Y, Property: p2,p3 , type2:N
ghi    type1: N, Property: p1,p2 , type2:Y
jkl    type1: N, Property: p1,p3 , type2:Y""".split('\n')

for x in t:
    y = re.findall(r"[\w']+", x)
    #print y
    print '\t'.join((y[0],y[2],y[4]+','+y[5],y[7]))

> abc   Y   p1,p3   N
> def   Y   p2,p3   N
> ghi   N   p1,p2   Y
> jkl   N   p1,p3   Y

没有正则表达式的另一种方法是替换所有定界字符,然后自动重建。 像这样:

print [x.replace(':','\t').replace(' , ','\t').split() for x in t]

使用正则表达式和组捕获来提取数据的示例脚本

script.py

#!/usr/bin/env python

import re,sys

def main():
    p = re.compile("([a-z]+).*type1:\s+([A-Z]),\s+Property:\s+?([a-z0-9,]+)\s+,\s+?type2:([A-Z])")

    for line in sys.stdin:
        m = p.match(line)
        if m:   
            print "\t".join([m.group(1), m.group(2), m.group(3), m.group(4)])

if __name__ == "__main__":
    main()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM