python的re.sub是否将数组作为输入参数?

时间:2012-08-24 21:11:18

标签: python regex arrays replace preg-replace-callback

根据http://www.php2python.com/wiki/function.preg-replace-callback/ re.sub是PHP的preg_replace_callback的python,但是php版本需要一个数组来匹配字符串,所以你可以传递多个字符串,但re.sub似乎需要只有一个字符串。

这是对的还是我对python的微弱知识?

3 个答案:

答案 0 :(得分:7)

如果要在数组上执行此操作,可以使用列表推导,例如

>>> array_of_strings = ["3a1", "1b2", "1c", "d"]
>>> [re.sub("[a-zA-Z]", "", elem) for elem in array_of_strings]
["31", "12", "1", ""]

虽然如果你使用复杂的表达式,你应该首先在模式上使用re.compile

答案 1 :(得分:2)

答案 2 :(得分:1)

我知道这个派对的后期,但如果这是一个需要很多步骤的过程,你想要封装到一个函数中,那么你可以通过numpy vectorize进行处理:

def EliminateAlpha(elem):
    return re.sub("[a-zA-Z]", "", elem)

ElimAlphaArray = np.vectorize(ElimateAlpha)

array_of_strings = ["3a1", "1b2", "1c", "d"]
print(ElimAlphaArray(array_of_strings))

['31' '12' '1' '']

当然,您可以将re.sub函数直接用于vectorize:

ElimAlphaArr = np.vectorize(re.sub)
print(ElimAlphaArr("[a-zA-Z]", "", array_of_strings))

['31' '12' '1' '']