gpt4 book ai didi

python - 使用正则表达式将文本拆分为句子

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:15 25 4
gpt4 key购买 nike

我正在学习正则表达式并尝试将文本拆分为句子。

这是我的文字

“史密斯先生以 150 万美元的价格购买了 Cheapsite.com,也就是说,他为此付出了很多钱。他介意吗?小亚当·琼斯 (Adam Jones Jr.) 认为他不介意。无论如何,这不是真的。” ...好吧,事实并非如此的概率为 0.9。”

还有我的正则表达式和代码

result = re.match(r"(.*\.{1}\s{1})[A-Z].*",line)

result.group(1) 给了我

“史密斯先生以 150 万美元的价格购买了 Cheapsite.com,也就是说,他为此付出了很多钱。他介意吗?小亚当·琼斯 (Adam Jones Jr.) 认为他不介意。无论如何,这不是真的。” ...”

我希望它只给我一个句子,直到第一次出现“.”。我知道这是一个贪婪的匹配,但无法弄清楚如何实现这一目标,因此寻求帮助。

注意:我在网上发现了很多将文本拆分成句子的正则表达式,但我想自己做。谢谢!!!

最佳答案

使用以下正则表达式:

.*?\.(?= [A-Z]|$)

.*? 将选择可选数据,但它是惰性的(它将选择第一个 .)

(?=) 是一个正向预测。它将检查数据是否存在,但不会捕获数据,因此您不会以 My 第一句话结束。 M,如下面的正则表达式。它将检查空格后跟大写字母 ([A-Z]),或 (|) 字符串末尾 ($) )

Live Demo on Regex101

<小时/>

最安全的正则表达式(处理 Mr.Mrs.)

要阻止 Mr. 弄乱 RegEx,您可以向 RegEx 添加Negative Lookbehind:

.*?(?<!Mr|Mrs)\.(?= [A-Z]|$)

Negative Lookbehind 将向后查找以检查点之前是否有 MrMrs。如果有,则匹配失败(这不是一句话的结尾)。

Live Demo on Regex101

<小时/>

您可以使用.*?\. [A-Z],但是这不会捕获字符串中的最后一句话。它还将匹配句子后面的空格和字母,即 我的第一句话。 M

正则表达式的主要问题是第一个 .* 不是懒惰的,它应该是 .*?,但是捕获组也有点也很奇怪。

关于python - 使用正则表达式将文本拆分为句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36594330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com