a
正確に2つ(3,4,5 ,.ではない)の単語が必要なパターンを見つける正規表現が欲しいですか?並んでいる必要はありません。
["taat","weagda","aa"]
大丈夫ですが、これではありません["a","eta","aaa","aata","ssdfaasdfa"]
。
user1870343
質問する
124 次
4 に答える
4
これは機能します:
^[^a]*a[^a]*a[^a]*$
2を任意の数に置き換えることができるより一般化されたバージョン:
^(?:[^a]*a){2}[^a]*$
上記の2つの正規表現a
は、単一の文字であるという事実を利用しているため、他のすべての文字がではないことを確認できa
ます。2つ目は繰り返し表記を使用します。
さらに一般化されたバージョン「n個以下の重複しないサブストリング」(DOTALLモードが有効):
^(?!(?:.*sstr){3})(?:.*sstr){2}.*$
正規表現でエスケープされた部分文字列はどこsstr
にあり、負の先読みの繰り返し回数は、一致させたい回数より1多い数でなければなりません。
これは少し注意が必要です。負の先読みを使用して、文字列にサブストリングのn + 1個の重複しないインスタンスが含まれていないことを確認してsstr
から、正確にn個の重複しないインスタンスを見つけようとします。
于 2012-12-27T07:38:24.723 に答える
0
この状況では、文字列を使用して検索し、forループを使用するだけでよいと思います。
mylist = ["taat","weagda","aa","eta","aaa","aata","ssdfaasdfa"];
resultList = [];
for x in mylist:
count = 0;
for c in x:
if c == 'a':
count = count +1;
if count == 2:
resultList.append(x);
print(resultList);
于 2012-12-27T07:43:19.190 に答える
0
すべてを1つに詰め込もうとするのではなく、2つの正規表現を使用して実行します。
あなたの言葉が一致し、一致a[^a]*a
しないことを確認してくださいa.*a.*a
于 2012-12-27T07:45:40.803 に答える
0
Counter
このタスクにオブジェクトを使用することもできます。
In [1]: from collections import Counter
In [2]: words = ["taat","weagda","aa", "a","eta","aaa","aata","ssdfaasdfa"]
In [3]: [word for word in words if Counter(word)['a'] == 2]
Out[3]: ['taat', 'weagda', 'aa']
于 2012-12-27T11:38:03.100 に答える