1

我需要遍历列表“listb”中的字符串,将字符“<”替换为“*”。

我试过这样:

import re
for i in listb:
    i = re.sub('\<','\*', 0)

但我不断收到 TypeError:预期的字符串或缓冲区。

不知道我做错了什么,网上的例子并没有太大帮助。

4

2 回答 2

2

查看文档

根据 Seth 的评论,使用正则表达式的最佳方法是:

listb = [re.sub(r'<',r'*', i) for i in listb]

正如@Paco 所说,您应该改用 str.replace ()。但是如果你仍然想使用 re:

你把0绳子放在应该去的地方!来自TypeError第三个参数。它是一个 int,需要是一个字符串。

旁注:始终r''在您的正则表达式中使用原始字符串,由 表示,因此您不必转义。

>>> listb = ['abc', '<asd*', '<<>>**']
>>> for i in listb:
...     i = re.sub(r'<',r'*', i)
...     print i
... 
abc
*asd*
**>>**
>>> listb
['abc', '<asd*', '<<>>**']

如果您想要一个替换所有内容的新列表,请执行以下操作:

>>> listx = []
>>> for i in listb:
...     listx.append(re.sub(r'<',r'*', i))
... 
>>> listx
['abc', '*asd*', '**>>**']
>>> listb
['abc', '<asd*', '<<>>**']
>>> listb = listx

如果您真的不想创建新列表,则可以遍历索引。

请注意,您没有i在列表中进行更改。我会在这里创建一个新列表。这里的每一个i都是自己的变量,不指向listb。

于 2013-08-24T00:13:28.510 回答
2
>>> my_string = 'fowiejf<woiefjweF<woeiufjweofj'
>>> my_string.replace('<', '*')
'fowiejf*woiefjweF*woeiufjweofj'

你为什么要使用 re 模块来做这么简单的事情?您可以使用该.replace方法。

于 2013-08-24T00:14:37.430 回答