Python正则表达式找到第n个数字
问题描述:
为了学习的目的,我从CodeFights做了一些正则表达式挑战。现在他们在改变什么以获得正确结果方面有非常具体的规则。我用一种不同的方法解决了这个难题,我无法围绕他们希望我做什么。Python正则表达式找到第n个数字
问:返回给予串的第n个编号不被零的
例含铅随后在至少0其它字符
# I can only change ... to solve it
# def nthNumber_asked(s, n):
# pattern = ...
# return re.match(pattern, s).group(1)
# How I solved it
def nthNumber_mine(s, n):
return re.findall(r'(0*)([0-9]+)', s)[n-1][1]
s1 = "8one 003number 201numbers li-000233le number444"
s2 = "LaS003920tP3rEt4t04Yte0023s3t"
print(nthNumber_mine(s1, 4)) # Expected outcome = 233
print(nthNumber_mine(s2, 4)) # Expected outcome = 4
答
为了满足要求,你可以使用这个表达式:
def nthNumber_asked(s, n):
pattern = "\D*(?:\d+\D+){" + str(n-1) + "}0*(\d+)"
return re.match(pattern, s).group(1)
首先我找一个非数字,则n-1组数字+非数字(非捕获),然后最后我忽略所有零,并且捕获数字的其余部分。然而,忽略所有零是一个坏主意,如果有一个只有零的数字,那将被忽略。我宁愿在数字中包含零。否则,可能需要一个更复杂的预见模式。
+0
完美!非常感谢 – Ludisposed
什么是模式定义? – Rahul
这就是我想要弄清楚的。 – Ludisposed
你想要的最后一个号码或最高号码 –