Python:数字在字母后保留空格后替换空格

时间:2018-02-28 10:24:04

标签: python regex

作为预处理数据的一部分。我希望能够替换空格后跟一个数字,保持空格后跟一个字符。 例如:

Input String: '8.1.7 Sep 2000 Dec 2004 Dec 2006 Indefinite'

Expected output: '8.1.7,Sep 2000,Dec 2004,Dec 2006,Indefinite'

我在python中使用基于正则表达式的替换函数:

re.sub("\s+", ",", release) 

但这并不是取得所需的结果,只是因为这意味着要替换所有空格,不知道如何保留一个后跟字符,即[a-z]

或许我需要重新思考方法。

2 个答案:

答案 0 :(得分:7)

您可以使用(?<=\d)在空格之前要求数字:

release = re.sub(r"(?<=\d)\s+", ",", release)

请参阅regex demo

<强>详情

  • (?<=\d) - 一个正向的后视,需要一个数字立即出现在当前位置的左侧
  • \s+ - 一个或多个空白字符。

答案 1 :(得分:4)

您可以尝试使用反向引用:

>>> re.sub(r"(\d)\s+", r"\1,", '8.1.7 Sep 2000 Dec 2004 Dec 2006 Indefinite')
'8.1.7,Sep 2000,Dec 2004,Dec 2006,Indefinite'

所以代码是:

release = re.sub(r"(\d)\s+", "\1,", release)

阐释:

  • (\d)匹配一个数字并将其放入第一个匹配组
  • \s+匹配空格
  • 代替:\1引用您找到的数字并将其放回(不含空格)