我需要遍历列表“listb”中的字符串,将字符“<”替换为“*”。
我试过这样:
import re
for i in listb:
i = re.sub('\<','\*', 0)
但我不断收到 TypeError:预期的字符串或缓冲区。
不知道我做错了什么,网上的例子并没有太大帮助。
我需要遍历列表“listb”中的字符串,将字符“<”替换为“*”。
我试过这样:
import re
for i in listb:
i = re.sub('\<','\*', 0)
但我不断收到 TypeError:预期的字符串或缓冲区。
不知道我做错了什么,网上的例子并没有太大帮助。
查看文档
根据 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。
>>> my_string = 'fowiejf<woiefjweF<woeiufjweofj'
>>> my_string.replace('<', '*')
'fowiejf*woiefjweF*woeiufjweofj'
你为什么要使用 re 模块来做这么简单的事情?您可以使用该.replace
方法。