具有特殊字符,可选空间和任意数量的Python正则表达式

时间:2015-11-05 00:55:02

标签: python regex

我正在尝试将python中的某些数据标准化,以便在数字跟随的情况下将#替换为NUMBER。此外,#和数字之间可以有一个选项空间。以下是我到目前为止的情况。我正在努力弄清楚如何保留空间。

string_stuff = re.sub(ur'#\s?[0-9]', 'NUMBER \1', string_stuff)

我知道上面的代码匹配其中一个数字,但我如何匹配所有数字?以下是几个例子。

# 334534 > NUMBER 334534
#657 > NUMBER 657
#234234234 > NUMBER 234234234

任何帮助表示赞赏!感谢。

3 个答案:

答案 0 :(得分:0)

您需要将[0-9]放入捕获组中,以便可以在替换部件中对其进行反向引用。

string_stuff = re.sub(r'#\s?([0-9])', r'NUMBER \1', string_stuff)

DEMO

答案 1 :(得分:0)

我会使用前瞻来做到这一点:

re.sub(ur"#(?=\s?[0-9])", "NUMBER", string_stuff)

这实际上并不替换可选空格+数字 - 它只是使用它们来匹配。

答案 2 :(得分:0)

您需要一个捕获组(由parens表示)。这个组中的内容将替换为\1。您还需要匹配一个或多个数字。 +匹配前一个元素中的一个或多个。

string_stuff = re.sub(ur'#\s?([0-9]+)', 'NUMBER \1', string_stuff)