gpt4 book ai didi

python - 查找重复的单词,仅第一次出现

转载 作者:行者123 更新时间:2023-12-04 03:44:53 27 4
gpt4 key购买 nike

假设我有以下文本 block :

Hi, here
is some text.
This is some Hi here more
And some.

我想突出显示包含多个单词的项目,如下所示:

enter image description here

但是,我只希望它突出显示第一个匹配项——换句话说,该词前面不应该有匹配项(第二个 some 不应该出现)。我能想到的唯一方法是使用负后视,但我使用的是 python 的正则表达式,它不允许可变长度后视。这是怎么做到的?


是的,我当然可以执行以下操作:

>>> from collections import Counter;Counter('Hi, here\nis some text. \nThis is some Hi here more\nAnd some.'.split())
Counter({'some': 2, 'is': 2, 'here': 2, 'And': 1, 'This': 1, 'text.': 1, 'some.': 1, 'Hi': 1, 'Hi,': 1, 'more': 1})

但我很好奇是否可以使用 regex 来做到这一点。

最佳答案

这项任务最好结合正则表达式和代码来完成:

import re
text = 'Hi, here\nis some text. \nThis is some Hi here more\nAnd some.'
print( list(set(re.findall(r'\b([a-z]{2,})\b(?=.*\b\1\b)', text, re.DOTALL))) )
# => ['here', 'some', 'is']

参见 this Python demo .

如果您有一些非常具体的任务只涉及一个正则表达式操作,您需要安装 PyPi regex library (在终端中输入 pip install regexpip3 intall regex 并按 ENTER)并使用

import regex
text = r'''Hi, here
is some text.
This is some Hi here more
And some.'''
print( regex.findall(r'\b([a-z]{2,})\b(?<!\b\1\b.*\1)(?=.*\b\1\b)', text, regex.DOTALL) )
# => ['here', 'some', 'is']

参见 this Python demothis ECMAScript regex demo . (?<!\b\1\b.*\1)如果捕获到第 1 组的单词出现在本次匹配的任何地方,则 lookbehind 将失败匹配。

请注意,您的正则表达式不假定可能存在重叠匹配,因为它只匹配由两个或更多小写 ASCII 字母组成的整个单词,因此,我删除了捕获组和外部先行。

关于python - 查找重复的单词,仅第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65337461/

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