[英]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.