2017-05-23 13 views
0

3つ以上の母音を含む文字列と一致する正規表現を作成しようとしています。3つ以上の母音を含む正規表現の文字列

私はこの1つ試した:

[AEIOU] {3}

をしかし、母音を配列しているときにのみ動作します。任意のヒント ?

例えば

  1. サミュエル - >有効
  2. ジョアン - >無効
  3. ソルマヌエル - >有効
  4. ソル - >無効な
+0

3つ以上の異なる母音か同じですか? – Rahul

+0

それらが異なっていても同じでも関係ありません –

+0

@Green_Sam、有効で無効な例を投稿してください – RomanPerekhrest

答えて

1

をしたい場合があり、それを行うには、いくつかの方法があり、この場合にはそれをシンプルに保つことは、おそらく将来の開発者にとって最も役に立つでしょうそのコードを維持する。これは正規表現についての楽しい部分です。頻繁に更新しない人にとっては、非常に効率的で巧みな、そして非常に難しいものにすることができます。

import re 

regex = "[aeiou].*[aeiou].*[aeiou]" 

mylist = [ 
"Samuel", #yes! 
"JOAN", #no! 
"Sol Manuel", #yes! 
"", #no! 
] 

for text in mylist: 
    if re.search(regex, text, re.IGNORECASE): 
     print ("Winner!") 
    else: 
     print ("Nein!") 

また、あなたは選択のあなたの言語で無視ケースフラグを持っていない場合は、[aeiouAEIOU]する各パーツを調整することができます。がんばろう! :)

0

試してみてください、このパターン:

^.*[AEIOUaeiou].*[AEIOUaeiou].*[AEIOUaeiou].*$ 
原因私はおそらくそれがより効率的にする必要がありますので、最初の(非先読み)パターンを使用して好むバックトラックの可能性に

^(?=.*[AEIOUaeiou].*[AEIOUaeiou].*[AEIOUaeiou]).*$ 

なお:

は、我々はまた、肯定先読みを使用することができます。

+0

またスペースにマッチしませんか? – quackenator

+0

@quackenatorあなたが話していることは分かりません。 –

+0

'doo de'のような刺しゅうが最初の正規表現に一致します – quackenator

0

これは、このような先読みを使用して実現できます。

正規表現:^(?=.*[aeiou].*[aeiou].*[aeiou])(?:[a-z] *)+$

説明:母音3回に続いて任意の文字の存在のため

  • (?=.*[aeiou].*[aeiou].*[aeiou])肯定先読みをチェックします。

  • (?:[a-zA-Z] *)+は、スペースで区切られた1つ以上の英語の単語に一致します。

Regex101 Demo


大文字小文字を区別しないモードでは、正規表現

正規表現次使用OFFの場合:^(?=.*[aeiouAEIOU].*[aeiouAEIOU].*[aeiouAEIOU])(?:[a-zA-Z] *)+$

Regex101 Demo

+0

私はこの問題を解決する最も効率的な方法であるとは思わない。 –

+0

@TimBiegeleisen:合意しました!それは直接のマッチの代わりです。最も効率的なのは、Wiktorがコメントで述べたように、母音の数を一致させて数えることです。 – Rahul

0

だけ

(\w*[aeuio]\w*){3,} 

か、行の試合

^(.*[aeuio].*){3,}$ 
関連する問題