编辑以澄清我的尝试以及我的目标。
我的目标是获取一个列表,并且对于列表中的每个元素,使用“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]
答案 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']