正则表达式将`a.b`替换为`a。 B`?

时间:2018-04-26 03:29:37

标签: python regex

我正在尝试将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

1 个答案:

答案 0 :(得分: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'