【问题标题】:How to replace character between two digits using re in Python?如何在 Python 中使用 re 替换两位数字之间的字符?
【发布时间】:2019-11-18 08:34:23
【问题描述】:

我想处理字符串数据集并将“-”替换为“。” 我有这个数据集:

AUDI XXX-R 2-0TS
AUDI XXX-R 2-0T
AUDI X-R 2-0

我希望将 '-' 替换为 '.'所以所有出现的 number-number** 都应该替换为 number.number**

我尝试添加以下正则表达式模式,但它也替换了 Alphabet 的“-”

[^a-z-A-Z]?(\d)-(\d)?[a-zA-Z]?[a-z-A-Z]

我需要这样的模式,无论字符串是什么,两位数之间的“-”都应该替换为“。”

【问题讨论】:

  • (\d)-(\d) 不工作吗?替换为\1.\2

标签: python regex


【解决方案1】:

我们可以为此使用lookaround constructs [regular-expressions.info]

from re import compile as recompile

rgx = recompile(r'(?<=\d)[-](?=\d)')

对于这个rgx,我们可以替换为:

>>> rgx.sub('.', 'AUDI XXX-R 2-0TS AUDI XXX-R 2-0T AUDI X-R 2-0')
'AUDI XXX-R 2.0TS AUDI XXX-R 2.0T AUDI X-R 2.0'

如果右边的数字是可选的,我们可以省略它,比如:

rgx = recompile(<b>r'(?&lt;=\d)[-]'</b>)

因此,3-A 也将替换为 3.A

【讨论】:

  • @Williem Van Onsen 一切都很好,直到 2-5X 巡演这个 remians 原封不动,我很难过。
  • @SaifAli:两个正则表达式都返回 '2.5X Touring' 以在本地输入 rgx.sub('.', '2-5X Touring')
  • 好的,谢谢!但我的数据集现在只有一件事 2-4 FORD XXX 所以我只希望在数字有一些前面的文本时替换“-”。
猜你喜欢
  • 2021-09-24
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-20
  • 1970-01-01
相关资源
最近更新 更多