0

a正確に2つ(3,4,5 ,.ではない)の単語が必要なパターンを見つける正規表現が欲しいですか?並んでいる必要はありません。 ["taat","weagda","aa"]大丈夫ですが、これではありません["a","eta","aaa","aata","ssdfaasdfa"]

4

4 に答える 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 に答える