在 python 字符串中的句点后添加空格时遇到问题

Vat*_*hra 0 python

我必须编写代码来做两件事:

  1. 将多个出现的空格字符压缩为一个。

  2. 如果没有空格,请在句号后添加一个空格。

例如:

input> This   is weird.Indeed
output>This is weird. Indeed.
Run Code Online (Sandbox Code Playgroud)

这是我写的代码:

def correction(string):
    list=[]
    for i in string:
        if i!=" ":
            list.append(i)
        elif i==" ":
            k=i+1
            if k==" ":
               k=""
            list.append(i)

    s=' '.join(list)
    return s

strn=input("Enter the string: ").split()
print (correction(strn))
Run Code Online (Sandbox Code Playgroud)

这段代码接受用户的任何输入并删除所有额外的空格,但它没有在句点后添加空格(我知道为什么不这样做,因为拆分函数它将句号和下一个单词作为一个单词,我只是不知道如何修复它)

这是我在网上找到的代码:

import re
def correction2(string):
  corstr = re.sub('\ +',' ',string)
  final = re.sub('\.','. ',corstr)
  return final

strn= ("This   is as   .Indeed")
print (correction2(strn))
Run Code Online (Sandbox Code Playgroud)

这段代码的问题是我无法接受用户的任何输入。它是在程序中预定义的。那么任何人都可以建议如何改进这两个代码中的任何一个来对用户的任何输入执行这两个功能吗?

Fin*_*ood 5

这是你想要的吗?

import re

def corr(s):
    return re.sub(r'\.(?! )', '. ', re.sub(r' +', ' ', s))

s = input("> ")
print(corr(s))
Run Code Online (Sandbox Code Playgroud)

我已将正则表达式更改为前瞻模式,请看这里


编辑:根据评论中的要求解释正则表达式

应用re.sub()为(至少)三个参数:正则表达式的搜索模式中,替换匹配的模式应替换,并且其中所述替换应做的字符串。

我在这里做的是一次两步,我一直在使用一个函数的输出作为另一个函数的输入。首先,内部re.sub(r' +', ' ', s)搜索多个空格 ( r' +')s以将它们替换为单个空格。然后外部re.sub(r'\.(?! )', '. ', ...)查找不跟随空格字符的句点以将它们替换为'. '. 我正在使用负前瞻模式来仅匹配与指定的前瞻模式(在本例中为正常空格字符)不匹配的部分。您可能想尝试一下这种模式,这可能有助于更好地理解它。

r字符串前缀将字符串更改为禁用反斜杠转义的原始字符串。在这种情况下是不必要的,但我的习惯是使用带有正则表达式的原始字符串。