0

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

>>> 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 从模式中隔离出来。有任何想法吗?

4

1 回答 1

3

使用lookbehind/lookahead,像这样:

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

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

在您的情况下,这应该足够了r'\s(?=\d)',可能不需要向后看。

于 2012-12-27T13:03:46.607 回答