2017-04-30 9 views
1

正規表現を使用して引用符で囲んだ単語のグループのみを選択しようとしています。Pythonの正規表現のスター数量が期待通りに機能しない

例。

入力:

this is 'a sentence' with less 'than twenty words' 

出力:

['a sentence', 'than twenty words'] 

私が使用している正規表現は次のとおりです。

'\'[\w]+[ ]+[[\w]+[ ]+]*[\w]+\'' 

しかし、それは単に 'よりも20の言葉' を返します。実際には、文字列は2つのスペースでのみ返されます。

+0

何の機能あなたがに対するあなたの入力を一致させるために使用されています正規表現? – chepner

+0

re.findall()、@chepner – Claudia

+1

**文字クラス**と**グループ**の詳細を学習する必要があります。 –

答えて

3

これを試してみてください:

import re 
re.findall(r"\'(\s*\w+\s+\w[\s\w]*)\'", input_string) 

Demo

+0

"引用符で囲まれた複数の単語" – Claudia

+0

@Claudia、以前の解決策は少しバグがありました。 –

0
import re 
sentence = "this is 'a sentence' with less 'than twenty words' and a 'lonely' word" 
regex = re.compile(r"(?<=')\w+(?:\s+\w+)+(?=')") 
regex.findall(sentence) 
# ['a sentence', 'than twenty words'] 

、我々はそれらをキャプチャすることなく、始まり、引用符で終わる文字列をキャプチャしたいので、私たちは前に肯定後読みアサーション(?<=')を使用し、先読みその後アサーション(?=')

引用符の中には、少なくとも1つの単語と、少なくとも1つのスペースと単語のグループが必要です。キャプチャグループにしたくない場合は、findallはこのグループのみを返しますので、(?:....)を使用してキャプチャしません。

+0

私は以前に公開されたAhsanulの答えを受け入れましたが、あなたも正しいです。投票した。 Ty。 – Claudia

+0

@Claudia:あなたの質問は、引用符を文字列から除外することを要求したことに注意してください。 –

1

このコード

import re 
st = "this is 'a sentence' with less 'than twenty words'" 
re.findall(r"\'([\w|\s]+)\'", st) 
+1

おそらくあなたの正規表現を説明するためにOPに有益でしょう、少なくとも少し。 – Michael

+0

@Michael私はこの正規表現から、言葉とスペースが含まれているqutation marksの間の文字列を私たちに伝えたいと思っています。 –

0

後期答えを試していますが、使用することができます。

import re 
string = "this is 'a sentence' with less 'than twenty words'" 
result = re.findall("'(.*?)'", string) 
print result 
# ['a sentence', 'than twenty words'] 

Python Demo
Regex Demo

関連する問題