Python上的正则表达式按符号拆分字符串而不删除

2024-05-03 09:56:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个函数,它可以执行以下操作:

>> foo("String. New sentence. And again.")
["String.", "New sentence.", "And again."]

我阅读了regex上的文档并编写了以下代码:

def foo(string):
    return re.split(r'([.!?])', string)

此函数输出保留标点符号,但将其与句子分开:

["String", ".", "New sentence", ".", "And again", "."]

我想把这三个句子分开

如何改进此功能


Tags: and函数代码文档renewstringreturn
2条回答

在结束分隔符之前包含字符,然后尝试re.findall

>>> import re
>>> s = "String. New sentence. And again."
>>> re.findall(r'[^ ].*?[.!?]', s)
['String.', 'New sentence.', 'And again.']

[^ ]意味着我们要寻找的东西不是以空格开头的。.*?表示任何字符,不包括其后的[.!?]

像这样的

import re
def foo(string):
    return re.findall(r'\s*([a-zA-Z0-9 -,\']+[\.!\?]+)\s*', string)

将返回一个“句子”数组。修改regex以适应可能看到的字符类型

例如

string = "This isn't what I had in mind, but it will do. WHAT!!? OK, OK stop typing already."
re.findall(r'\s*([a-zA-Z0-9 -,\']+[\.!\?]+)\s*', string)
["This isn't what I had in mind, but it will do.", 'WHAT!!?', 'OK, OK stop typing already.']

相关问题 更多 >