Python2.7编辑字符串

2024-04-19 02:13:20 发布

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

我想知道如何删除字符串中除方括号以外的所有内容

如果用户输入"Hello, my name is [lol] bob [not[really]] john[son]""[[[[]]][[][][]"

如果用户输入类似于第一条语句的内容,我想删除除括号以外的所有内容。我不想实现输入验证。干杯

编辑:谢谢你们的帮助,我爱你们


Tags: 字符串用户name内容helloismynot
3条回答

当对答案有疑问时,值得尝试一些方法并确定时间:

PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]]  john[son]'
"@ @"
for x in frozenset(s)-frozenset('[]'):
    s = s.replace(x, '')
"@

1000000 loops, best of 3: 0.844 usec per loop

PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]]  john[son]'
"@ "''.join(c for c in s if c in '[]')"

100000 loops, best of 3: 4.79 usec per loop

PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]]  john[son]'
"@ @"
s.translate(str.maketrans('','',''.join(set(s)-set('[]'))))
"@

100000 loops, best of 3: 8.5 usec per loop

PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]]  john[son]'
"@ "''.join(filter(lambda x: x in '[]', s))"


100000 loops, best of 3: 9.67 usec per loop

PS C:\python33> .\python.exe lib\timeit.py -s @"
s = 'Hello, my name is [lol] bob [not[really]]  john[son]'
import re
"@ "re.sub('[^][]', '', s)"

100000 loops, best of 3: 15.9 usec per loop

因此@guess现在在要删除的字符集上使用s.replace()删除的答案似乎是最快的,而正则表达式替换是最慢的(但这是python3.3和我的机器,其他的可能不同)。你知道吗

另请注意,如果将上述所有设置字符串替换为:

s = 'Hello, my name is [lol] bob [not[really]]  john[son]'*1000

我得到的时间是:

10000 loops, best of 3: 190 usec per loop
100 loops, best of 3: 3.6 msec per loop
100 loops, best of 3: 4.25 msec per loop
100 loops, best of 3: 8.72 msec per loop
100 loops, best of 3: 7.13 msec per loop

因此re.sublambda解的伸缩性更好,但其他解保持在相同的相对位置。你知道吗

您可以使用^{}

s = "Hello, my name is [lol] bob [not[really]] john[son]"
s = ''.join(c for c in s if c in '[]')
print s

输出:

[][[]][]

使用lambdafilter只是另一种方法,但我发现它更漂亮。你知道吗

>>> your_input = "Hello, my name is [lol] bob [not[really]] john[son]"
>>> ''.join(filter(lambda x: x in '[]', your_input))
'[][[]][]'

相关问题 更多 >