【问题标题】:Python regex: replace some chars just before pattern occurrences in a stringPython regex:在字符串中出现模式之前替换一些字符
【发布时间】:2012-12-12 20:50:48
【问题描述】:

我在使用 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 从模式中隔离出来。有什么想法吗?

【问题讨论】:

  • 一般来说,尤其是正则表达式,明智的做法是不仅提供 INPUT,还提供预期的 OUTPUT,这将有助于人们帮助您。

标签: python regex string replace


【解决方案1】:

使用lookbehind/lookahead,像这样:

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

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

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

【讨论】:

  • 感谢安德斯,这解决了问题。我确实在文档中看到了它(向后/向前看),但无法获得该机制。现在很清楚了。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多