【发布时间】:2017-07-05 14:06:26
【问题描述】:
任务 你得到一个字符串。它由字母数字字符、空格和符号(+、-)组成。 您的任务是查找包含两个或多个元音的原始字符串的所有子字符串。 此外,这些子串必须位于辅音之间,并且只能包含元音。
输入格式:包含字符串的单行输入。
输出格式:按出现的顺序分别打印匹配的子字符串 线。如果未找到匹配项,则打印 -1。
示例输入:
rabcdeefgyYhFjkIoomnpOeorteeeeet样本输出:
eeIooOeoeeeee
以上挑战来自https://www.hackerrank.com/challenges/re-findall-re-finditer
以下代码通过所有测试用例:
import re
sol = re.findall(r"[^aiueo]([aiueoAIUEO]{2,})(?=[^aiueo])", input())
if sol:
for s in sol:
print(s)
else:
print(-1)
以下没有。
import re
sol = re.findall(r"[^aiueo]([aiueoAIUEO]{2,})[^aiueo]", input())
if sol:
for s in sol:
print(s)
else:
print(-1)
它们之间的唯一区别是正则表达式的最后一位。我不明白为什么第二个代码会失败。我认为?= 没有用,因为通过对[aiueoAIUEO]{2,} 分组,我已经将它排除在捕获之外,但显然我错了,我不知道为什么。
有什么帮助吗?
【问题讨论】:
-
尝试
moomoom两种方法:) 两者都不完全正确,因为[^aeiou]允许使用空格、大写元音和特殊符号而不是明确的辅音。 -
@SebastianProske 我想排除大写元音,但忘了。关于空格和其他符号,我只是失败了(显然,测试用例的选择也是如此)。非常感谢你。我测试了
moomoom,看看你的意思,但不明白为什么 bootom 代码会失败。
标签: python regex python-3.x