gpt4 book ai didi

Python 正则表达式 findall 匹配所有单词对

转载 作者:太空宇宙 更新时间:2023-11-04 11:11:20 25 4
gpt4 key购买 nike

我需要用正则表达式在字符串中按顺序列出每对单词,代码的相关部分是这样的:

for word in re.findall(r'\w+\b.*?\w+', text):

现在让我们以文本"This is a random text"为例,我想要的是这样的列表:

['This is','is a','a random','random text']

相反,我得到的是:

['This is','a random']

我该如何解决这个问题?提前致谢。

最佳答案

你说过单词是由随机数量的空格和/或标点符号分隔的,为此,我使用了 [\s\.]+

你在这里做错的是你正在使用第二个词,你需要的是一个与第二个词匹配但不使用它的积极前瞻,所以它会在下次匹配它。因为你说它是一个巨大的文本,我认为使用 finditerfindall 更好,不同之处在于它返回一个生成器,该生成器生成 findall< 返回的相同元素:

import re

text ="""This. is a random text"""

pattern = re.compile(r'(\w+[\s\.]+)(?=(\w+))')
for match in pattern.finditer(text):
# rebuild the word
element = ''.join(match.groups())
print(element)

输出:

This. is
is a
a random
random text

请注意,默认情况下,正面前瞻不是捕获组,这就是为什么我这样做 (?=(\w+)) 来捕获其中的单词。第一组是 (\w+[\s\.]+)。然后我使用 join 再次重建连接组。

关于Python 正则表达式 findall 匹配所有单词对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58142724/

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