Python正则表达式:用空格替换点和符号

Python正则表达式:用空格替换点和符号,python,regex,Python,Regex,我要替换点/?/!后跟分隔(如果有)到特征线字符\n,并消除空白。 所以在:helloworld的情况下。很好。我希望它是你好世界。\n很好。\n 这就是我的想法(但它不起作用,否则我不会写这个问题哈?) 谢谢 您是否尝试过替换 print text.replace('. ','.\n').replace('? ','?\n').replace('! ','!\n') 您是否尝试过更换 print text.replace('. ','.\n').replace('? ','?\n').rep

我要替换点/?/!后跟分隔(如果有)到特征线字符
\n
,并消除空白。 所以在:
helloworld的情况下。很好。
我希望它是
你好世界。\n很好。\n

这就是我的想法(但它不起作用,否则我不会写这个问题哈?)


谢谢

您是否尝试过
替换

print text.replace('. ','.\n').replace('? ','?\n').replace('! ','!\n')

您是否尝试过更换

print text.replace('. ','.\n').replace('? ','?\n').replace('! ','!\n')

将空格或字符串结尾与后面的正面外观匹配:

re.sub(r'(?<=[.?!])( +|\Z)', r'\n', text)
否则会收到太多的新行

演示:

>>重新导入
>>>text=“你好,世界,很好。”

>>>re.sub(r'(?匹配空格或后面有正面外观的字符串结尾:

re.sub(r'(?<=[.?!])( +|\Z)', r'\n', text)
否则会收到太多的新行

演示:

>>重新导入
>>>text=“你好,世界,很好。”
>>>re.sub(r’(?无环视):

>>> import re
>>> line="hello world! What? It's nice."
>>> re.sub(r'([.?!]+) *', r'\1\n', line)   # Capture punctuations; discard spaces
"hello world!\nWhat?\nIt's nice.\n"

>>> line="hello world! His thoughts trailed away... What?"
>>> re.sub(r'([.?!]+) *', r'\1\n', line)
'hello world!\nHis thoughts trailed away...\nWhat?\n'
没有环顾:

>>> import re
>>> line="hello world! What? It's nice."
>>> re.sub(r'([.?!]+) *', r'\1\n', line)   # Capture punctuations; discard spaces
"hello world!\nWhat?\nIt's nice.\n"

>>> line="hello world! His thoughts trailed away... What?"
>>> re.sub(r'([.?!]+) *', r'\1\n', line)
'hello world!\nHis thoughts trailed away...\nWhat?\n'

为什么示例字符串中的一个空格被删除了,而另一个没有被删除?您是指
helloworld.\n是指
还是
helloworld.\n这很好。\n
?它没有跟在我想要替换的任何点或其他字符后面。为什么示例字符串中的一个空格被删除,而另一个没有被删除?您是指
helloworld.\n是指
helloworld.\n是指
>或者
你好世界。\n很好。\n
?它没有跟随任何我想被替换的点或其他字符。但是如果有多个空格,它将不会被替换。只有第一个空格会被替换。但是如果有多个空格,它将不会被替换。只有第一个会被替换。这也将与
“他的思想慢慢消失了…”
并在每个点后插入换行符。然后,我的也一样。@MartijnPietters您提到的点应该在上面的编辑中处理。这也将与
“他的思想逐渐消失…”
并在每个点后插入换行符。然后,我的也将如此。@MartijnPieter您提到的点应该在上面的编辑中处理。