gpt4 book ai didi

python - 使用 Look Behind 或 Look Ahead 函数查找匹配项时的正则表达式模式

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

我试图根据Python中的正常语法规则正确地分割句子。

我要拆分的句子是

s = """Mr. Smith bought cheapsite.com for 1.5 million dollars,
i.e. he paid a lot for it. Did he mind? Adam Jones Jr. thinks he didn't. In any case, this isn't true... Well, with a
probability of .9 it isn't."""

预期输出是

Mr. Smith bought cheapsite.com for 1.5 million dollars, i.e. he paid a lot for it.

Did he mind?

Adam Jones Jr. thinks he didn't.

In any case, this isn't true...

Well, with a probability of .9 it isn't.

为了实现这一点,我使用的是常规的,经过大量搜索后,我发现了以下正则表达式,它可以实现这一点。new_str只是从's'中删除一些\n

m = re.split(r'(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<=\.|\?)\s',new_str)

for i in m:
print (i)



Mr. Smith bought cheapsite.com for 1.5 million dollars,i.e. he paid a lot for it.
Did he mind?
Adam Jones Jr. thinks he didn't.
In any case, this isn't true...
Well, with aprobability of .9 it isn't.

所以我理解reg ex的方式是我们首先选择

1) 所有字符如 i.e

2)从第一个选择的过滤空格中,我们选择这些字符没有像先生、夫人等词

3)从过滤的第二步中,我们仅选择那些带有点或问题且前面有空格的主题。

所以我尝试更改顺序如下

1)先过滤掉所有标题。

2) 从过滤的步骤中选择前面有空格的步骤

3) 删除所有短语,如 i.e

但是当我这样做时,后面的空白也会被分割

m = re.split(r'(?<![A-Z][a-z]\.)(?<=\.|\?)\s(?<!\w\.\w.)',new_str)

for i in m:
print (i)


Mr. Smith bought cheapsite.com for 1.5 million dollars,i.e.
he paid a lot for it.
Did he mind?
Adam Jones Jr. thinks he didn't.
In any case, this isn't true...
Well, with aprobability of .9 it isn't.

修改后的程序中的最后一步不应该能够识别诸如“i.e.”之类的短语,为什么它无法检测到它?

最佳答案

第一个,最后一个.(?<!\w\.\w.)看起来很可疑,如果您需要将文字点与其匹配,请转义它( (?<!\w\.\w\.) )。

回到问题,当你使用r'(?<![A-Z][a-z]\.)(?<=\.|\?)\s(?<!\w\.\w.)'时正则表达式中,最后一个负向后查找检查空格后面的位置前面是否没有单词 char、点、单词 char、任何 char(因为 . 未转义)。这个条件为真,因为有一个点,e ,另一个.以及该位置之前的一个空格。

使后向工作与之前一样\s ,输入 \s也进入后向模式:

(?<![A-Z][a-z]\.)(?<=\.|\?)\s(?<!\w\.\w.\s)

请参阅regex demo

另一个增强功能可以在第二个lookbehind中使用字符类:(?<=\.|\?) -> (?<=[.?]) .

关于python - 使用 Look Behind 或 Look Ahead 函数查找匹配项时的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40443363/

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