gpt4 book ai didi

python - 查找字符串中下一次出现的位置

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

我是 python 的新手,正在尝试熟悉正则表达式和字符串处理。我写了一个正则表达式,通过它可以识别整个字符串中的数字并将其提取到数组中。

我想要一个包含找到的术语位置的并行数组。

为了澄清,假设主字符串是:

text = '11 scholars are selected to comptete on Feb 20 , 2019. 
Afterwards, 11 professors will review their submitted work.
The results will be announced on Mar 20 , 2019.'

正如我所说,我可以从上面的字符串中匹配 nums = ['11', '20', '2019', '11', '20', '2019']。现在,我想形成一个同步数组来存储每个数字的位置。我正在使用以下代码段:

positions = []
for num in nums:
pos = text.find(num)
positions.append(num + ' : ' + str(pos))

positions 数组包含:positions = ['11 : 0', '20 : 44', '2019 : 49', '11 : 0', '20 : 44', '2019 : 49'] 这显然不是我想要的。由于列表中有重复的数字(如两个 11 或 12),text.find(num) 返回第一次出现的术语。因此,当程序到达下一个出现的标记时,它返回第一次出现的位置。

关于如何解决这个问题有什么想法吗?

最佳答案

您可以使用 finditer它返回一个产生匹配对象的迭代器,您可以从这些匹配中获取匹配的字符串和起始位置:

import re

text = """11 scholars are selected to comptete on Feb 20 , 2019.
Afterwards, 11 professors will review their submitted work.
The results will be announced on Mar 20 , 2019."""

[(m.group(0), m.start()) for m in re.finditer(r'\d+', text)]
# [('11', 0), ('20', 44), ('2019', 49), ('11', 68), ('20', 154), ('2019', 159)]

或者,如果您希望它按照您的问题进行格式化:

['{}: {}'.format(m.group(0), m.start()) for m in re.finditer(r'\d+', text)]
# ['11: 0', '20: 44', '2019: 49', '11: 68', '20: 154', '2019: 159']

关于python - 查找字符串中下一次出现的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54726850/

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