替换“<”使用带有Python正则表达式的“*”

时间:2013-08-24 00:02:47

标签: python python-2.7

我需要在列表“listb”中查看字符串,替换字符“<”用“*”。

我试过这样:

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

但我一直得到TypeError:期望的字符串或缓冲区。

不确定我做错了什么,网上的例子没什么帮助。

2 个答案:

答案 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方法。