字符串中倒数第二个整数 (Python)
Second last occurence of an integer in a string (Python)
整数在字符串中的倒数第二个出现
将“hEY3 a7yY5”视为我的字符串,此字符串中的最后一个整数是 5,倒数第二个整数是 7。
如何找到该字符串中倒数第二个整数的索引?
我不确定我是否可以使用 rindex(),如果可以,那么如何使用。
上述字符串中7的index为6。
我无法全神贯注地写 stre.rindex(isnumeric())
这样的东西
您可以尝试这样的操作
a = "hEY3 a7yy5"
out = [i for i,j in enumerate(a) if j.isnumeric()][-2]
print(out)
使用模式获取倒数第二个数字索引的选项,并使用 Match 对象的 start() 方法:
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
字符串结束
)
关闭前瞻
这将找到字符串中倒数第二个出现的数字序列并打印其偏移量。
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”,则会打印相同的结果 - 也就是说,这也处理多于一位数的序列
整数在字符串中的倒数第二个出现
将“hEY3 a7yY5”视为我的字符串,此字符串中的最后一个整数是 5,倒数第二个整数是 7。
如何找到该字符串中倒数第二个整数的索引? 我不确定我是否可以使用 rindex(),如果可以,那么如何使用。
上述字符串中7的index为6。
我无法全神贯注地写 stre.rindex(isnumeric())
您可以尝试这样的操作
a = "hEY3 a7yy5"
out = [i for i,j in enumerate(a) if j.isnumeric()][-2]
print(out)
使用模式获取倒数第二个数字索引的选项,并使用 Match 对象的 start() 方法:
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
字符串结束
)
关闭前瞻
这将找到字符串中倒数第二个出现的数字序列并打印其偏移量。
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”,则会打印相同的结果 - 也就是说,这也处理多于一位数的序列