Python Re.Split () opsplitsen op spaties, komma’s en perioden, maar niet in gevallen zoals 1.000 of 1,50

Ik wil Python re.split()gebruiken om een ​​tekenreeks te splitsen in individuele woorden door spaties, komma’s en perioden. Maar ik wil niet "1,200"om op te splitsen in ["1", "200"]of ["1.2"]naar worden opgesplitst in ["1", "2"].

Voorbeeld

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

Het resultaat moet ["one", "two", "3.4", "5,6" , "seven", "eight", "nine", "ten"]


Antwoord 1, Autoriteit 100%

Gebruik een negatieve lookahead en een negatieve lookhechten:

> 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']

Met andere woorden, u hebt altijd gesplitst door \s(WHITEESPACE), en alleen gesplitst door komma’s en perioden als ze niet gevolgd zijn (?!\d)of voorafgegaan op (?<!\d)door een cijfer.

Demo .

Bewerken : volgens @verdesmarald Commentaar, wilt u mogelijk het volgende gebruiken:

> 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']

Hiermee wordt verdeeld "1.2,a,5"in ["1.2", "a", "5"].

Demo .


Antwoord 2, Autoriteit 5%

Dus u wilt splitsen op spaties en op komma’s en punten die niet door cijfers zijn omgeven. Dit zou moeten werken:

r" |(?<![0-9])[.,](?![0-9])"

Other episodes