【问题标题】:Regex replace `a.b` to `a. b`? [duplicate]正则表达式将 `a.b` 替换为 `a. b`? [复制]
【发布时间】:2018-04-26 03:29:36
【问题描述】:

我正在尝试将a.b 类型的所有字符串更改为a. b。如果任何字符是大写的,它也应该起作用。请注意,a. 不应更改为 a.\(space)

我尝试过使用正则表达式来做到这一点:

a = "a.b"
a = re.sub(r'[a-b]\.[a-b]', ' .', a)

输出应该是a. b,但它是.,因为它也替换了所有字符,而不是保留字符并在点后放置一个空格。

有人知道如何在 Python 中做到这一点吗?

编辑:当两个句子之间有句点时,我试图添加一个空格。但是,我不能使用str.replace,因为在这种情况下它也会添加一个空格,比如1.5 变成1. 5,这不是我想要的。我试图做正则表达式,但无法让它工作。

此外,这必须适用于所有可能的句子,而不仅仅是a.b

【问题讨论】:

  • a.replace('.', '. ')?不太确定怎么可能是a. \s
  • 替换不起作用的原因是它会在句尾添加一个空格,而后面没有另一个空格。
  • @Isaac 这似乎不是那个的副本。
  • @AdamSmith 对我做了什么
  • 整个字母表。

标签: python regex


【解决方案1】:

您可以使用以下([abAB])\.([abAB])

>>> import re
>>> s = ['a.b', 'A.b', 'a.B', 'A.B']
>>> [re.sub(r'([abAB])\.([abAB])', r'\1. \2', i) for i in s]
['a. b', 'A. b', 'a. B', 'A. B']

您的方法的问题是您没有保存捕获组以在替换结果中使用。

如果你想让它适用于整个字母表,你可以使用这个:

>>> s = 'billy.bob'
>>> re.sub(r'([a-zA-Z])\.([a-zA-Z])', r'\1. \2', s)
'billy. bob'

【讨论】:

  • 是否适用于更多单词,例如billy.bob
  • @hockeybro 已更新为使用整个字母表。
猜你喜欢
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 2012-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多