2017-09-25 11 views
1

フォロワー番号を以下のような文字列から抽出しています。最初のパターンは1桁では機能しないようです。最初のパターンは数字の後に文字があり、最初の行に4Followersの間に他の文字がないかどうかをチェックするのでしょうか? 2番目のパターンはうまく動作します。フォロワ数を抽出するための正規表現パターン

import re 

text = """ 
4 Followers 
330 Followers 
23.5k Followers 
67k Followers 
25m Followers 
""" 
print(re.compile(r'(\d.+) Followers').findall(text)) 
print(re.compile(r'(\d+|\d.+) Followers').findall(text)) 
+1

本当に単純にhttps://regex101.com/を使用する必要があります – Idos

+0

スペースを分割して最初の配列を取得してください。 – StefansArya

+0

@Idosそれは私が使ったことです。正規表現に新しいだけでなく、パターンを理解しようとすると、私はよりよく出てきました。 –

答えて

1

\d.+パターンは、改行文字以外の1桁の数字と1つ以上の文字に一致します。

数字と一致する空白以外のものと一致する空白文字とそれに続くFollowersと思われます。

使用

text = """ 
4 Followers 
330 Followers 
23.5k Followers 
67k Followers 
25m Followers 
""" 
print(re.findall(r'\b(\d\S*) Followers', text)) 
# => ['4', '330', '23.5k', '67k', '25m'] 

regexPython demoを参照してください。

詳細

  • \b - 単語境界
  • (\d\S*) - グループ1:数字、そして0+非空白記号
  • Followers - リテラルストリング。

ご入力がうまくフォーマットされている場合、あなたはまた、文字列を分割することがあります。

[x.split()[0] for x in text.split('\n')] 

Python demo(:['4', '330', '23.5k', '67k', '25m']出力)を参照してください。

+1

私は 'text'文字列がちょうどダミーとして使われたのでパターンを調べます。パターンは掻き集められたウェブサイトからフォロワーカウントを抽出するために使われ、正規表現はbs4よりもずっと高速です。確かな答え、ありがとう! –

1

私はそれが最初のパターンは一桁と一致していない、それは
最初のパターンは桁が続く期待していることだということではありません

...あなたの質問は2つのパターンで、なぜ異なる結果であると考えていますFollowersの前に2文字分。

私はどのは、正規表現に関連した空白修飾子を無視表示されていない、
ので、正規表現は本当に

        (\d.+)[ ]Followers 
            ^^
      where this ----------------| | 
      expects at least 1 char,  | 
      and this ----------------------| 
      expects 1 more 
      =================================== 
      total is minimum 2 chars between digit and Followers 

正規表現が動作する理由はそれだけで1つの文字
を期待されています数字とフォロワーの間

     (\d+|\d.+)[ ]Followers 
         ^ ^
       digit ----|  | 
       1 char-------------| 
関連する問題