[英]Regex for a consecutive character occurring at least three times in a string in Python
[英]Finding a simpler Python RegEx for a string that contains each character at least once
我正在做一個小項目,需要正則表達式,該正則表達式至少接受一次包含給定字母中每個字符的字符串。
因此,對於字母{J, K, L}
我需要一個RegEx來接受包含J
一次或多次, K
一次或多次,AND L
一次或多次,以任意順序包含任意重復字符的字符串,之后或之間。
我對RegEx缺乏經驗,因此很難找到針對許多問題的“橫向思考”解決方案。 因此,我的第一種方法是蠻力的:例如,我采用了每個可能的“基本”字符串,
JKL, JLK, KJL, KLJ, LKJ, LJK
並允許從這些起點之一構建的任何字符串。 但是,最終的正則表達式*(盡管有效)最終變得很長,並且包含很多冗余。 更不用說一旦字母表中包含幾個以上的字符,這種方法將變得完全站不住腳。
我花了幾個小時試圖找到一種更優雅的方法,但是我還沒有找到仍然可以接受所有可能的字符串的方法。 我是否可以使用一種方法或技術以一種更優雅,更可擴展的方式(針對較大的字母)完成此任務?
*作為參考,我列出的示例的正則表達式為:
((J|K|L)*J(J|K|L)*K(J|K|L)*L(J|K|L)*)|
((J|K|L)*J(J|K|L)*L(J|K|L)*K(J|K|L)*)|
((J|K|L)*K(J|K|L)*J(J|K|L)*L(J|K|L)*)|
((J|K|L)*K(J|K|L)*L(J|K|L)*J(J|K|L)*)|
((J|K|L)*L(J|K|L)*J(J|K|L)*K(J|K|L)*)|
((J|K|L)*L(J|K|L)*K(J|K|L)*J(J|K|L)*)
這是前瞻的典型用例。 您可以簡單地使用^(?=[^J]*J)(?=[^K]*K)(?=[^L]*L)
檢查所有條件。 如果您的字符串還必須僅包含這些字符,則可以在其后附加[JKL]+$
。
如果不需要使用正則表達式,則還可以單獨檢查字符:
text = ...
alphabet = 'JKL'
assert all([character in text for character in alphabet])
或者,如果您不想允許字母以外的字符:
assert set(alphabet) == set(text)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.