我需要在列表“listb”中查看字符串,替换字符“<”用“*”。
我试过这样:
import re
for i in listb:
i = re.sub('\<','\*', 0)
但我一直得到TypeError:期望的字符串或缓冲区。
不确定我做错了什么,网上的例子没什么帮助。
答案 0 :(得分:2)
请参阅docs
根据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。
答案 1 :(得分:2)
>>> my_string = 'fowiejf<woiefjweF<woeiufjweofj'
>>> my_string.replace('<', '*')
'fowiejf*woiefjweF*woeiufjweofj'
为什么使用re模块这么简单?您可以使用.replace
方法。