字符串中倒数第二次出现的整数 (Python)

发布于 2025-01-10 07:50:10 字数 228 浏览 0 评论 0原文

字符串中倒数第二次出现的整数

考虑“hEY3 a7yY5”作为我的字符串,该字符串中的最后一个整数是 5,倒数第二个整数是 7。

如何找到该字符串中最后第二个整数的索引? 我不确定是否可以使用 rindex() 以及如果可以的话如何使用。

上述字符串中 7 的索引是 6。 我无法专心写类似 stre.rindex(isnumeric()) 的内容

Second last occurence of an integer in a string

Consider "hEY3 a7yY5" as my string, the last integer in this string is 5 and the second last integer is 7.

How do I find index of last second integer in this string?
I'm not sure to if I can use rindex() and if so then how.

The index of 7 in the above string is 6.
I can't wrap my head around writing something like stre.rindex(isnumeric())

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

余厌 2025-01-17 07:50:10

这将找到字符串中倒数第二个出现的数字序列并打印其偏移量。

import re
a = "hEY3 a7yY5"
offsets = [m.start() for m in re.finditer(r'\d+', a)]
print(-1 if len(offsets) < 2 else offsets[-2])

如果您不喜欢re,那么您可以这样做:

offsets = []

for i, c in enumerate(a):
    if c.isdigit():
        if offsets:
            if offsets[-1] != i - 1:
                offsets.append(i)
        else:
            offsets = [i]
            
print(-1 if len(offsets) < 2 else offsets[-2])

输出:

6

请注意,如果字符串是“hEY7 a75yY5”,则会打印相同的结果 - 即,这个还处理多于一位数字的序列

This will find the penultimate occurrence of a sequence of digits in a string and print its offset.

import re
a = "hEY3 a7yY5"
offsets = [m.start() for m in re.finditer(r'\d+', a)]
print(-1 if len(offsets) < 2 else offsets[-2])

If you are averse to re then you can do it like this:

offsets = []

for i, c in enumerate(a):
    if c.isdigit():
        if offsets:
            if offsets[-1] != i - 1:
                offsets.append(i)
        else:
            offsets = [i]
            
print(-1 if len(offsets) < 2 else offsets[-2])

Output:

6

Note that the same result would be printed if the string is "hEY7 a75yY5" - i.e., this also handles sequences of more than one digit

沫尐诺 2025-01-17 07:50:10

使用模式获取倒数第二个数字的索引的选项,并使用 匹配 对象:

s = "hEY3 a7yY5"
pattern = r"\d(?=[^\d\n]*\d[^\d\n]*\Z)"

m = re.search(pattern, s)
if m:
    print(m.start())

输出

6

模式匹配:

  • \d 匹配单个数字
  • (?= 正向前瞻,断言要做什么右边是
    • [^\d\n]* 可选择匹配除数字或换行符之外的任何字符
    • \d 匹配单个数字
    • [^\d\n]* 可选择匹配除数字或换行符之外的任何字符
    • \Z 字符串结尾
  • ) 关闭前视

An option to get the index of the second last digit using a pattern, and use the start() method of the Match object:

s = "hEY3 a7yY5"
pattern = r"\d(?=[^\d\n]*\d[^\d\n]*\Z)"

m = re.search(pattern, s)
if m:
    print(m.start())

Output

6

The pattern matches:

  • \d Match a single digit
  • (?= Positive lookahead, assert what is to the right is
    • [^\d\n]* Optionally match any char except a digit or a newline
    • \d Match a single digit
    • [^\d\n]* Optionally match any char except a digit or a newline
    • \Z End of string
  • ) Close the lookahead
纸伞微斜 2025-01-17 07:50:10

你可以尝试这样的事情

a = "hEY3 a7yy5"
out = [i for i,j in enumerate(a) if j.isnumeric()][-2]
print(out)

You may try something like this

a = "hEY3 a7yy5"
out = [i for i,j in enumerate(a) if j.isnumeric()][-2]
print(out)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文