我在使用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。有什么想法吗?
答案 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)'
就足够了,可能不需要后视。