任務 給出一個字符串。它由字母數字字符,空格和符號(+, - )組成。 您的任務是查找包含兩個或更多元音的原始字符串的所有子字符串。 此外,這些子字符串必須位於輔音之間,只應包含元音。在輔音之間找到每兩個(非重疊)元音
輸入格式:單行輸入包含字符串。
輸出格式:在單獨的 行中按照其出現順序打印匹配的子字符串。如果找不到匹配項,請打印-1。
樣品輸入:
rabcdeefgyYhFjkIoomnpOeorteeeeet
樣本輸出:
ee
Ioo
Oeo
eeeee
挑戰上面從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代碼失敗。 – WhyWhyWhy