我必须编写一个代码来做两件事:
将一个以上的空格字符压缩为一个。
如果没有一段时间,请在一段时间后添加一个空格。
例如:
input> This is weird.Indeed
output>This is weird. Indeed.
这是我写的代码:
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))
此代码接受用户的任何输入并删除所有额外的空格,但是在句点之后它没有添加空格(我知道为什么不这样做,因为它具有分割功能它占用了这段时间而下一个单词作为一个单词,我只是无法解决它的问题。
这是我在网上找到的代码:
import re
def correction2(string):
corstr = re.sub('\ +',' ',string)
final = re.sub('\.','. ',corstr)
return final
strn= ("This is as .Indeed")
print (correction2(strn))
此代码的问题是我无法接受用户的任何输入。它是在程序中预定义的。 那么有人可以建议如何改进这两个代码中的任何一个来执行用户输入的任何功能吗?
答案 0 :(得分:3)
这是你想要的吗?
import re
def corr(s):
return re.sub(r'\.(?! )', '. ', re.sub(r' +', ' ', s))
s = input("> ")
print(corr(s))
我已将正则表达式更改为超前模式,请查看here。
编辑:按照评论中的要求解释正则表达式
re.sub()需要(至少)三个参数:正则表达式搜索模式,替换匹配的模式应替换为,以及其中的字符串应该做替换。
我在这里做的是两个步骤,我一直在使用一个函数的输出作为另一个函数的输入。
首先,内部re.sub(r' +', ' ', s)
在r' +'
中搜索多个空格(s
),以用单个空格替换它们。然后外部re.sub(r'\.(?! )', '. ', ...)
查找期间而不跟随空格字符,将其替换为'. '
。我正在使用负前瞻模式来仅匹配与指定的超前模式(在这种情况下为正常空格字符)不匹配的部分。您可能希望使用此模式play around,这可能有助于更好地理解它。
r
字符串前缀将字符串更改为raw string,其中禁用反斜杠转义。在这种情况下不必要,但我的习惯是使用带有正则表达式的原始字符串。
答案 1 :(得分:0)
更基本的答案,没有正则表达式:
>>> def remove_doublespace(string):
... if ' ' not in string:
... return string
... return remove_doublespace(string.replace(' ',' '))
...
>>> remove_doublespace('hi there how are you.i am fine. '.replace('.', '. '))
'hi there how are you. i am fine. '
答案 2 :(得分:0)
您尝试以下代码:
>>> s = 'This is weird.Indeed'
>>> def correction(s):
res = re.sub('\s+$', '', re.sub('\s+', ' ', re.sub('\.', '. ', s)))
if res[-1] != '.':
res += '.'
return res
>>> print correction(s)
This is weird. Indeed.
>>> s=raw_input()
hee ss.dk
>>> s
'hee ss.dk'
>>> correction(s)
'hee ss. dk.'