40

re.split()Python を使用して、文字列をスペース、コンマ、ピリオドで個々の単語に分割したいと考えています。しかし、私はに分割されたり、"1,200"分割され["1", "200"]たりしたくありません。["1.2"]["1", "2"]

l = "one two 3.4 5,6 seven.eight nine,ten"

結果は["one", "two", "3.4", "5,6" , "seven", "eight", "nine", "ten"]

4

2 に答える 2

69

ネガティブルックアヘッドとネガティブルックビハインドを使用します。

> s = "one two 3.4 5,6 seven.eight nine,ten"
> parts = re.split('\s|(?<!\d)[,.](?!\d)', s)
['one', 'two', '3.4', '5,6', 'seven', 'eight', 'nine', 'ten']

つまり、常に\s(空白)で分割し、コンマとピリオドの後に数字がない(?!\d)場合、または数字が前に付いていない場合にのみ、コンマとピリオドで分割します(?<!\d)

デモ

編集:@verdesmaraldのコメントによると、代わりに以下を使用することをお勧めします。

> s = "one two 3.4 5,6 seven.eight nine,ten,1.2,a,5"
> print re.split('\s|(?<!\d)[,.]|[,.](?!\d)', s)
['one', 'two', '3.4', '5,6', 'seven', 'eight', 'nine', 'ten', '1.2', 'a', '5']

これはに分割"1.2,a,5"され["1.2", "a", "5"]ます。

デモ

于 2012-10-02T01:09:23.890 に答える
3

したがって、スペース、および数字で囲まれていないコンマとピリオドで分割する必要があります。これは機能するはずです:

r" |(?<![0-9])[.,](?![0-9])"
于 2012-10-02T01:10:10.823 に答える