【问题标题】:Replace particular strings in python替换python中的特定字符串
【发布时间】:2018-01-19 10:04:19
【问题描述】:

我需要在大量文本中将所有出现的“W32 L30”替换为“W32in L30in”。 W、L 后面的数字也不同。

我想用这个正则表达式

[W]([-+]?\d*\.\d+|\d+)
[L]([-+]?\d*\.\d+|\d+)

但是这些只能找到每个 W 和 L 之后的数字,因此替换每个出现仍然很费力且非常耗时,所以我想知道是否有办法直接在正则表达式中执行此操作。

【问题讨论】:

  • 数字也可以是浮点数?
  • 是的,它们也可以是浮点数

标签: python regex


【解决方案1】:

您可以使用捕获组并简化正则表达式。接下来我们可以使用 backref 来进行替换。喜欢:

import re

RGX = re.compile(r'([WL]([-+]?\d*\.\d+|\d+))(in)?')
result = RGX.sub(r'\1in', some_string)

\1 用于引用第一个捕获组:我们使用[WL]([-+]?\d*\.\d+|\d+) 捕获的字符串的结果。最后一部分(in)? 也可以选择匹配单词in,这样如果已经存在in,我们只需将其替换为相同的值。

所以如果some_string 是例如:

>>> some_string
'A W2 in C3.15 where L2.4in and a bit A4'
>>> RGX.sub(r'\1in', some_string)
'A W2in in C3.15 where L2.4in and a bit A4'

【讨论】:

  • 谢谢,这很好,但是如果我使用some_string="W32in L45" 会发生什么?我会得到"W32inin L45in",但我想要"W32in L45in"
  • @Brian: 仅当它以in 结尾时?如果是W32out,会发生什么?
  • 仅当它以 in 结尾时
猜你喜欢
  • 1970-01-01
  • 2017-05-03
  • 2012-09-14
  • 2018-03-04
  • 2015-11-19
  • 2012-08-09
  • 2020-11-22
相关资源
最近更新 更多