In [32]: import re
In [33]: s='abcd2343 abw34324 abc3243-23A'
In [34]: re.split('(\d+)',s)
Out[34]: ['abcd', '2343', ' abw', '34324', ' abc', '3243', '-', '23', 'A']
Albo, jeśli chcesz podzielić się na pierwszym wystąpieniu cyfry:
In [43]: re.findall('\d*\D+',s)
Out[43]: ['abcd', '2343 abw', '34324 abc', '3243-', '23A']
\d+
mecze 1-lub-więcej cyfr.
\d*\D+
dopasowuje cyfry 0 lub więcej, a następnie 1 lub więcej cyfr innych niż cyfry.
\d+|\D+
mecze 1-lub-więcej cyfr lub 1-lub więcej-nie-cyfr.
Aby uzyskać więcej informacji na temat składni wyrażeń regularnych w języku Python, należy skonsultować się z the docs.
re.split(pat, s)
będzie podzielić ciąg s
korzystając pat
jako ogranicznik. Jeśli pat
zaczyna się i kończy nawiasami (aby być "grupą przechwytującą"), wówczas re.split
zwróci również podciągi dopasowane przez pat
. Na przykład, porównaj:
In [113]: re.split('\d+', s)
Out[113]: ['abcd', ' abw', ' abc', '-', 'A'] # <-- just the non-matching parts
In [114]: re.split('(\d+)', s)
Out[114]: ['abcd', '2343', ' abw', '34324', ' abc', '3243', '-', '23', 'A'] # <-- both the non-matching parts and the captured groups
Natomiast re.findall(pat, s)
zwraca tylko te części s
pasujących pat
:
In [115]: re.findall('\d+', s)
Out[115]: ['2343', '34324', '3243', '23']
Zatem, jeśli s
kończy się cyfrą, można uniknąć kończąc na pusty ciąg za pomocą re.findall('\d+|\D+', s)
zamiast re.split('(\d+)', s)
:
In [118]: s='abcd2343 abw34324 abc3243-23A 123'
In [119]: re.split('(\d+)', s)
Out[119]: ['abcd', '2343', ' abw', '34324', ' abc', '3243', '-', '23', 'A ', '123', '']
In [120]: re.findall('\d+|\D+', s)
Out[120]: ['abcd', '2343', ' abw', '34324', ' abc', '3243', '-', '23', 'A ', '123']
Jeśli użyjesz "(\ d +)", a cyfra będzie ostatnim znakiem ciągu, ostatni wpis na liście będzie pusty. Jak tego uniknąć? – user124384
IIUC, możesz użyć 're.findall ('(\ d + | \ D +)', 'abcd2343 abw34324 abc3243-23')', które zwraca '['abcd', '2343', 'abw', '34324' , "abc", "3243", "-", "23"] ". – unutbu