我想替换字符串中的一些字符。数据框中有三条是数千条线。
字符串示例:
(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
答案 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\.]+)\)
翻译为英语,表示(
的一个字符,包含一个或多个数字的组,其间可能有.
,然后是另一个结束)
。