Python / Regex部分字符串替换

时间:2015-02-16 22:00:05

标签: python regex python-2.7

编辑以澄清我的尝试以及我的目标。

我的目标是获取一个列表,并且对于列表中的每个元素,使用“X”替换管道后面的任何字符(如果存在这样的字符)。

例如:

[A|1,B|C,D|9]将成为[A|X,B|X,D|X]

从网上看,我认为这将是某种正则表达式,但我不确定如何具体获得跟随的一个字符。

我试过了

re.sub('|*?', "X", listname)

但在开始之前得到“悬空元字符”错误。我想说:“在|后跟任何单个字符,并将该字符更改为X.

我也尝试过:

re.sub('\|(.)', "X", listname)

但获得TypeError: expected string or buffer

我正在寻找澄清评论的更多背景......

在我的特定代码中|永远都会有一些东西。我只关心那个“某事”的第一个特征。所以[A | 124,B | s]需要产生[A | X24,B | X]

2 个答案:

答案 0 :(得分:3)

  

我想说:“在|之后选择任意一个字符,然后将该字符更改为 X

您可以使用列表推导和以下正则表达式来完成此操作。

>>> import re
>>> lst = ['A|1', 'B|C', 'D|9', 'E|124', 'F|s']
>>> [re.sub(r'(?<=\|).', 'X', x) for x in lst]
['A|X', 'B|X', 'D|X', 'E|X24', 'F|X']

(?<= ... )是一个零宽度断言,不会“消耗”字符串上的任何字符,但只断言字符串中当前位置前面的字符是|

答案 1 :(得分:3)

先前匹配条款更正确,但可能更难理解。

您可能会发现更容易匹配|并再次替换它:

import re

data = ['A|1', 'B|C', 'D|9']
data = [re.sub("\|.", "|X", d) for d in data]

# data = ['A|X', 'B|X', 'D|X']