首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串块中的Python带连字符

字符串块中的Python带连字符
EN

Stack Overflow用户
提问于 2018-04-25 10:52:46
回答 2查看 2.2K关注 0票数 2

我想从字符串块中去掉连字符:例如:

代码语言:javascript
复制
"(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复制的完整字符串。

我尝试了以下几点:

代码语言:javascript
复制
 if data.endswith('-'):
        data=seq[:-1]
代码语言:javascript
复制
data.strip("\r\n")

我希望我的输出/结果是这样的:

代码语言:javascript
复制
(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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-25 11:02:33

代码语言:javascript
复制
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分隔开,所以您需要先拆分它们,然后按如下方式加入它们:

代码语言:javascript
复制
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将字符串拆分,生成一个字符串列表,在列表理解中进行迭代。

时间比较:

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2018-04-25 11:05:36

使用re,您将不必拆分您的字符串并重新构建它。

代码语言:javascript
复制
>>> 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
mno
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50020436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档