用于行尾的Python正则表达式

用于行尾的Python正则表达式,python,regex,Python,Regex,我正在尝试编写一个正则表达式,它在一个点之前和之后添加一个空格。 然而,我只想要这个,如果有一个空间或结束线后的点 然而,我不能这样做的线结束的情况 Eg. I want a hotel. >> I want a hotel . my email is zob@gmail.com >> my email is zob@gmail.com I have to play. bye! >> I have to play . bye! 以下是我的代码: # If

我正在尝试编写一个正则表达式,它在一个点之前和之后添加一个空格。 然而,我只想要这个,如果有一个空间或结束线后的点

然而,我不能这样做的线结束的情况

Eg.

I want a hotel. >> I want a hotel .
my email is zob@gmail.com >> my email is zob@gmail.com
I have to play. bye! >> I have to play . bye!
以下是我的代码:

# If "Dot and space" after word or number put space before and after
utterance = re.sub(r'(?<=[a-z0-9])[.][ $]',' . ',utterance)
#如果在单词或数字后面加上“点和空格”,则在前后加空格

outrance=re.sub(r’(?
[$])
定义了一类由空格和美元符号组成的字符,因此它在空格或美元(字面上)上匹配。要在空格或行尾匹配,请使用
(|$)
(在本例中,
$
保留了它的特殊含义。

主要问题是字符类中的
$
表示文字符号
$
符号,这里只需要一个符号

我建议使用以下代码:

import re
regex = r"([^\W_])\.(?:\s+|$)"
ss = ["I want a hotel.","my email is zob@gmail.com", "I have to play. bye!"]
for s in ss:
    result = re.sub(regex, r"\1 . ", s).rstrip()
    print(result)

详细信息

  • ([^\W_u417;]
    -第1组匹配任何字母或数字
  • \。
    -文字点
  • (?:\s+|$)
    -匹配1+空格或字符串结尾锚点的分组(此处,
    $
    匹配字符串结尾。)
rstrip
将删除更换过程中添加的尾部空间

如果您使用的是Python3,默认情况下,
[^\W\U]
将匹配所有Unicode字母和数字。在Python2中,
re.U
标志将启用此行为


请注意,最后一个
(?:\s+|$)
中的
\s+
将把多个空格“收缩”到一个空格中。

使用先行断言
(?=)
查找一个
,后跟空格或行尾
\n

utterance = re.sub('\\.(?= )|\\.(?=\n)', ' . ', utterance )

你不想在最后一个
后面加空格,对吗?实际上我不介意!我当时发布了完整的答案。