2010-03-05 73 views
0

自从我做了任何正则表达式以来,这已经过去了几年(几年),所以转向这里的专家,因为这很可能是一个简单的练习:)正则表达式+ Python从制表符分隔的文件中删除特定的尾部和末尾字符

我有个制表符分隔的文件,并在每一行我有具有值的诸如某些字段:

  • FOO
  • 酒吧
  • b“Foo的栏”
  • b'bar富”
  • b'carbar '

(文件中的一个完整的线可能是这样的:

123 \ t b'bar富' \ TABC \ T123 \ r \ n

我想摆脱所有领先的b',b“和尾随”,“从每一行的该字段。因此,给出的例子线以上,运行正则表达式后,我会得到:

123 \ t 巴富 \ TABC \ T123 \ r \ n

奖励积分,如果你能给我蟒蛇的Blurb在文件上运行它。

回答

1

的每一行,你可以使用

re.sub(r'''(?<![^\t\n])\W*b(["'])(.*)\1\W*(?![^\t\n])''', r'\2', line) 

和奖励积分:

import re 

pattern = re.compile(r'''(?<![^\t\n])\W*b(["'])(.*?)\1\W*?(?![^\t\n])''') 
with open('outfile', 'w') as outfile: 
    for line in open('infile'): 
     outfile.write(pattern.sub(r'\2', line)) 
1

(^ | \ t)的B [\ “'] 应该匹配leadings,并尾随:

\”' 应该这样做

在Python,你这样做:

import re 
r1 = re.compile("(^|\t)b[\"']") 
r2 = re.compile("[\"'](\t|$)") 

就用

r1.sub("\\1", yourString) 
r2.sub("\\1", yourString) 
0
>>> "b\"foo's bar\"".replace('b"',"").replace("b'","").rstrip("\"'") 
"foo's bar" 
>>> "b'bar foo'".replace('b"',"").replace("b'","").rstrip("\"'") 
'bar foo' 
>>> 
相关问题