2016-10-17 30 views
1

見た後でafewsimilarquestions、私は正常に私のデータに部分文字列の分割を実装することができませんでした。私の場合は、たくさんの文字列があり、各文字列には抽出する必要がある部分文字列があります。文字列はリストにまとめられ、私のデータはNBAの位置です。私は各文字列からポジション( 'PG'、 'SG'、 'SF'、 'PF'、または 'C')を引き出す必要があります。一部の文字列には複数の位置があります。ここにデータがあります。文字列内の複数の部分文字列を検索して抽出しますか?

text = ['Chi\xa0SG, SF\xa0\xa0DTD','Cle\xa0PF'] 

コードは、理想的には、最初の文字列、'Chi\xa0SG, SF\xa0\xa0DTD'を見て、そして['SG','SF'] 2つの位置を返す必要があります。コードは2番目の文字列を参照し、['PF']を返します。

+1

明瞭にするために、完全な期待出力を追加できますか?例えば:これはあなたが探しているものですか? '[re.findall(r | \ b(PG | SG | SF | PF | C)\ b '、s)をテキストに含める]' – Sundeep

答えて

2

レバレッジ(ゼロ幅)前後参照:

(?<!\w)PG|SG|SF|PF|C(?!\w) 
  • (?<!\w)が行う、ゼロ幅負後読みパターンで所望の一致が

  • PG|SG|SF|PF|Cのいずれかに一致する任意の英数字によって先行されていないことを確認所望のパターン

  • (?!\w)はゼロ幅ネガティブルックアですヘッドパターンマッチが任意の英数字

    が続いていないことを確認すること

例:

In [7]: s = 'Chi\xa0SG, SF\xa0\xa0DTD' 

In [8]: re.findall(r'(?<!\w)PG|SG|SF|PF|C(?!\w)', s) 
Out[8]: ['SG', 'SF'] 
+0

なぜ単語境界を使わないのですか? 'r '\ b(PG | SG | SF | PF | C)\ b'' – Sundeep

0

heemaylの応答が最も正しいですが、あなたはおそらく、カンマで分割とだけ維持して逃げることができ各部分文字列の最後の2文字(または 'C'、最後の文字の場合)。

s = 'Chi\xa0SG, SF\xa0\xa0DTD' 
fin = list(map(lambda x: x[-2:] if x != 'C' else x[-1:],s.split(','))) 

私はクロムブックを使用しているため、現時点ではテストできませんが、動作するはずです。

+0

あなたのアイデアをコードでバックアップしてみませんか? – Sundeep

+0

私は現在それをテストする方法がありませんが、とにかくそれを与えました –

関連する問題