Python正则表达式:在字符串中出现模式之前替换一些字符

时间:2012-12-27 12:56:27

标签: python regex string replace

我在使用python的3正则表达式替换字符串中的字符时遇到问题。我能够找到模式出现,但我想替换在模式中首先出现的char。不幸的是,我正在取代整个模式。另一方面 - 我可能完全没有使用正则表达式完成这项任务。这就是我所拥有的:

>>> my_table1='\nParametr JednostkaNormaGodzinaŚrednia(1)123456789101112131415161718192021222324 \nDwutlenek siarki (SO2) µg/m3 350 56 53 50 51 51 44 41 36 39 42 34 30 34 33 26 25 24 23 24 25 21 21 22 24 35 \nTlenek azotu (NO) µg/m3 30 30 27 29 44 98 192

我想要做的是插入','或';'数字之间。我不能简单地用逗号替换所有空格,因为我不想拆分这部分:\nDwutlenek siarki (SO2) µg/m3。所以我想通过正则表达式(r'\s\d+')找到空格和数字的出现位置。这可以正确查找所有实例。现在我想使用sub函数将\ s替换为','但我不知道如何仅从模式中隔离\ s。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

使用lookbehind / lookahead,如下所示:

p = re.compile(r'(?<=\d)\s(?=\d)')
p.sub(';', my_table1)

正向后视(?<=\d)匹配数字(\d)之后的任何内容,而不匹配数字本身; \s匹配单个空白字符;并且正向前瞻(?=\d)匹配任何后跟数字的东西。因此,这将使用;替换两个数字之间的任何单个空格。请注意,lookbehind / ahead需要固定长度(因此您不能使用(?<=\d+)之类的内容。)

在你的情况下,只有r'\s(?=\d)'就足够了,可能不需要后视。