0

スペースで区切られた一連の単語が任意の順序で来る可能性がある場合、特定の単語セット内のそれらの単語のみを一致させるにはどうすればよいでしょうか。たとえば、私が持っているとします:

apple monkey banana dog一致させたいのですがapplebananaどうすればそれを行うことができますか?

これが私が試したことです:

m = re.search("(?P<fruit>[apple|banana]*)", "apple monkey banana dog")
m.groupdict() --> {'fruit':'apple'} 

でもリンゴとバナナの両方を合わせたい。

4

2 に答える 2

1

(?P<fruit>[apple|banana]*)

[apple|banana]* は文字クラスを定義します。たとえば、このトークンは 1 つの a、1 つの p、1 つの l、1 つの e、1 つの |、1 つの b または 1 つの n に一致し、「これに 0 回以上一致する」と言います。(とにかく、+ を使用するつもりだったのでしょう。これは「1 回以上の一致」を意味します)

必要なのは (apple|banana) で、文字列のリンゴまたは文字列のバナナに一致します。

詳細: http://www.regular-expressions.info/reference.html

次の質問では、最初の一致だけでなく、正規表現が文字列に対して行うすべての一致を取得するには、http://docs.python.org/2/library/re.html#re.findallを使用します

于 2013-05-02T02:18:55.247 に答える
0

繰り返しできるようにしたい場合は、空白で失敗します。これを試して:

input = ['apple','banana','orange']
reg_string = '(' + ('|').join(input) + ')'
lookahead_string = '(\s(?=' + ('|').join(input) + '))?' + reg_string + '?'
out_reg_string = reg_string + (len(input)-1)*lookahead_string
matches = re.findall(out_reg_string, string_to_match)

string_to_matchパターンを探しているのはどこですか。out_reg_string次のようなものに一致させるために使用できます。

  • 「アップルバナナオレンジ」
  • 「アップルオレンジ」
  • 「りんごバナナ」
  • 「バナナアップル」

または入力リストのデカルト積のいずれか。

于 2015-09-03T21:19:12.900 に答える