2016-12-01 276 views
0

我想替換字符串中的某些字符。數據框中有三條數千行這些行。字符串的替換字符串中的字符

例子:

(1) W00001 + (0.5) Q00003 <=> (1.7227) U00002 + (4) X21717 

我的代碼沒有工作:

for line in dat: 
    line.strip().split("\t") 
    line = sub(r'((\.+))',\2, line) 
    print line 

,我想輸出:

1 W00001 + 0.5 Q00003 <=> 1.7227 U00002 + 4 X21717 

回答

1

您需要使用組格式化替換sting,格式爲\g<group_number>

>>> s = '(1) W00001 + (0.5) Q00003 <=> (1.7227) U00002 + (4) X21717' 
>>> import re 
>>> re.sub(r'\(([\d\.]+)\)', '\g<1>', s) 
'1 W00001 + 0.5 Q00003 <=> 1.7227 U00002 + 4 X21717' 

另外,這可能是所需的正則表達式(如我在代碼加):

\(([\d\.]+)\) 

翻譯爲英語時,就意味着一個字符(,組含有之間,然後用可能.一個或多個數字另外收盤)

+0

非常感謝大家的幫助。好的解決方案問題現在解決了。 – user27976

2

既然你只是想刪除括號內我建議使用兩個replace()而不是regex()

In [9]: s = '(1) W00001 + (0.5) Q00003 <=> (1.7227) U00002 + (4) X21717' 

In [10]: s.replace('(', '').replace(')', '') 
Out[10]: '1 W00001 + 0.5 Q00003 <=> 1.7227 U00002 + 4 X21717' 

或者,如果你正在使用Python 2.x的作爲更有效的方法使用str.translate()方法:

In [9]: s = '(1) W00001 + (0.5) Q00003 <=> (1.7227) U00002 + (4) X21717' 

In [10]: s.translate(None, '()') 
Out[10]: '1 W00001 + 0.5 Q00003 <=> 1.7227 U00002 + 4 X21717' 

在Python 3.x都有:

In [18]: import string 
In [19]: s = '(1) W00001 + (0.5) Q00003 <=> (1.7227) U00002 + (4) X21717' 

In [20]: s.translate(string.maketrans('', ''), '()') 
Out[20]: '1 W00001 + 0.5 Q00003 <=> 1.7227 U00002 + 4 X21717' 
2

如果要刪除括號,你可以使用一個簡單的正則表達式:

import re 

line = "(1) W00001 + (0.5) Q00003 <=> (1.7227) U00002 + (4) X21717" 
print(re.sub(r"[()]", "", line)) 

你得到:

1 W00001 + 0.5 Q00003 <=> 1.7227 U00002 + 4 X21717 
2

一個簡單的方法可以是使用split()strip()功能。

我們分割字符串以獲得單詞列表,然後我們使用strip在每個單詞的開始/結尾處刪除'('和')',join()然後應用於結果以獲取所需的字符串。

生成表達式來遍歷詞語列表:

s = '(1) W00001 + (0.5) Q00003 <=> (1.7227) U00002 + (4) X21717' 
res = ' '.join(item.strip('()') for item in s.split(' ')) 
print(res) # Output: 1 W00001 + 0.5 Q00003 <=> 1.7227 U00002 + 4 X21717