2010-03-05 71 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' 
>>> 
相關問題