Python从字符串块中去掉连字符

2024-05-29 06:53:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从字符串块中去掉连字符: e、 g组:

"(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-"

这就是我的绳子的样子。需要一个泛型方法从每一行的末尾删除-。在

Note: This is one complete string copied from excel

我试过以下方法:

^{pr2}$
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

Tags: 方法字符串newdatayearcaaddrcb
3条回答
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分隔开,因此您需要先拆分并按如下方式连接它们:

^{pr2}$

'\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)

使用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
mno

使用str.rstrip

例如:

s = """"(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-:"""

r = ""
for i in s.split("\n"):
    r += "\n" + i.strip().rstrip("-")
print(r)

输出:

^{pr2}$

相关问题 更多 >

    热门问题