替换字符串行中的字符

时间:2016-12-01 22:39:25

标签: python regex

我想替换字符串中的一些字符。数据框中有三条是数千条线。

字符串示例:

(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

4 个答案:

答案 0 :(得分: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'

答案 1 :(得分:2)

如果要删除括号,可以使用简单的RegEx:

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 :(得分: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

答案 3 :(得分:1)

您需要使用格式为\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\.]+)\)

翻译为英语,表示(的一个字符,包含一个或多个数字的组,其间可能有.,然后是另一个结束)