我想从字符串块中去掉连字符:例如:
"(CB)-year-(3F)-year-
(56)-ADDR(01)-DATA(06)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new-
(56)-ADDR(01)-DATA(03)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new-
(05)-ADDR5-[address0]-(E0)-tWHR2-nintK-
(56)-ADDR(01)-DATA(05)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new-"我的绳子就是这样的。需要一个通用方法来从每一行的末尾删除-。
注意:这是一个从excel复制的完整字符串。
我尝试了以下几点:
if data.endswith('-'):
data=seq[:-1]data.strip("\r\n")我希望我的输出/结果是这样的:
(CB)-year-(3F)-year
(56)-ADDR(01)-DATA(06)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new
(56)-ADDR(01)-DATA(03)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new
(05)-ADDR5-[address0]-(E0)-tWHR2-nintK
(56)-ADDR(01)-DATA(05)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new发布于 2018-04-25 11:02:33
string = """"(CB)-year-(3F)-year-
(56)-ADDR(01)-DATA(06)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new-
(56)-ADDR(01)-DATA(03)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new-
(05)-ADDR5-[address0]-(E0)-tWHR2-nintK-
(56)-ADDR(01)-DATA(05)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new-"""上面的字符串以-结尾,在python中,完整的字符串被认为是单个字符串,而不是不同的字符串,因此在.endswith()中,所有其他连字符都不被视为字符串的结尾。
字符串只是用新行\n分隔开,所以您需要先拆分它们,然后按如下方式加入它们:
In [12]: print('\n'.join([i[:-1] if i[-1] == '-' else i for i in string.split('\n')]))
"(CB)-year-(3F)-year
(56)-ADDR(01)-DATA(06)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new
(56)-ADDR(01)-DATA(03)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new
(05)-ADDR5-[address0]-(E0)-tWHR2-nintK
(56)-ADDR(01)-DATA(05)-(00)-ADDR5-PBX-CHX-[address0]-(CA)-new逻辑:
'\n'.join(...)用\n连接所有可迭代的字符串
i[:-1]提供没有最后一个字符的字符串
i[-1] == '-'检查字符串的最后一个字符是否以连字符-结尾。
string.split('\n')用分隔符\n将字符串拆分,生成一个字符串列表,在列表理解中进行迭代。
时间比较:
In [18]: %timeit re.sub('-:?$', '', string, flags=re.MULTILINE)
2.74 µs ± 91.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [19]: %timeit '\n'.join([i[:-1] if i[-1] == '-' else i for i in string.split('\n')])
1.56 µs ± 24.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)发布于 2018-04-25 11:05:36
使用re,您将不必拆分您的字符串并重新构建它。
>>> import re
>>> s = '''abc
... de-f
... ghi-
... jkl--
... mno-:'''
>>> print(re.sub('-:?$', '', s, flags=re.MULTILINE))
abc
de-f
ghi
jkl-
mno
>>> print(re.sub('-+:?$', '', s, flags=re.MULTILINE))
abc
de-f
ghi
jkl
mnohttps://stackoverflow.com/questions/50020436
复制相似问题