2016-05-24 10 views
1

複数の区切り文字+/,.;を使用して次の値を分割したいとします。他の記号は区切り記号として使用しないでください。例えば複数の区切り文字に基づいて分割に制約を追加するにはどうすればよいですか?

CAP.44,45+62(400) 
e.morgan,44+32/78 

私は、次のコードを書いた:問題は.が例外を持っているかもしれないということです

import re 
data['COUNT'] = data['STRING_VALS'].apply(lambda x: len(re.findall(r'[+/,.; ]+', x))) 

を。次のマスク_.___の場合は区切り文字として使用しないでください。したがって、.の前に1文字があり、.の後に任意の数の文字がある場合は、_.___を分割しないでください。

このようなマスクベースの制約を上記のコードに追加するにはどうすればよいですか?

+0

'a.b.c'についてはどうですか?いくつの部品を分割する必要がありますか? –

+0

@AlexHall:3つの部分に分割する必要があります。 – JoeBlack

+0

それは私が期待したものではありません。だから、あなたは前にドット以外の文字が1つと複数ある場合にだけドットを分割したくないのですか? 'a.bb.c.dd'を' a.bb'と 'c.dd'に分割する必要がありますか? –

答えて

1

ネガティブなルックアヘッドとネガティブルックアヘッドを使用できます。 のような何か:

r'[\s+/,;]|(?<!_)[.](?!___)'

このようなこと:

p = re.compile(r'[\s+/,;]|(?<!_)[.](?!___)') re.split(p, 'CAP.44,45+62(400)')

リターン:['CAP', '44', '45', '62(400)']

しかし

re.split(p, '_.___') リターン:['_.___']

+0

ありがとうございます。私はそれをテストしました。ちょっとした問題は、 'tyt-21-47-rut'のような文字列が4ではなく長さ3を持つことです。 – JoeBlack

+0

申し訳ありませんが、私はあなたが意味するものをかなり得ていません。 – Proghero

関連する問題