我如何拆分字符串轉換成基於包含在子字符字符串。例如,給定一個字符串"ABC12345..::"
,我想獲得像['ABC', '12345', '..::']
這樣的列表。我知道每個子字符串的有效字符,但我不知道長度。所以字符串也可能看起來像"CC123:....:"
,在這種情況下,我想有['CC', '123', ':....:']
作爲結果。發現的字母,數字或符號組
1
A
回答
4
在你的例子中,你似乎沒有任何東西可以分割(例如,C
和1
之間沒有任何東西),但是你所擁有的是一個格式良好的模式,你可以匹配。所以只是簡單地創建一個圖案組你想匹配的字符串:
>>> import re
>>> s = "ABC12345..::"
>>> re.match('([A-Z]*)([0-9]*)([\.:]*)', s).groups()
('ABC', '12345', '..::')
替代,編譯模式爲可重複使用的正則表達式對象,並做到這一點:
>>> patt = re.compile('([A-Z]*)([0-9]*)([\.:]*)')
>>> patt.match(s).groups()
('ABC', '12345', '..::')
>>> patt.match("CC123:....:").groups()
('CC', '123', ':....:')
+0
像魅力一樣工作。我甚至很接近,只是忘記了各個塊周圍的'(...)'括號。謝謝! – Christian
1
如果你想有一個非regex
方法:
value = 'ABC12345..::'
indexes = [i for i, char in enumerate(value) if char.isdigit()] # Collect indexes of any digits
arr = [ value[:indexes[0]], value[indexes[0]:indexes[-1]+1], value[indexes[-1]+1:] ] # Use splicing to build list
輸出:
['ABC', '12345', '..::']
另一個字符串:
value = "CC123:....:"
indexes = [i for i, char in enumerate(value) if char.isdigit()] # Collect indexes of any digits
arr = [ value[:indexes[0]], value[indexes[0]:indexes[-1]+1], value[indexes[-1]+1:] ] # Use splicing to build list
輸出:
['CC', '123', ':....:']
編輯:
只是做一個標杆,metatoaster的方法比這個:)
2
匹配每個稍快帶有以下正則表達式的組
[0-9]+|[a-zA-Z]+|[.:]+
[0-9]+
任何數字重複任意次,或[a-zA-Z]+
任何字母重複任意次,或[.:]+
任何點或冒號重複任意次
這將允許您匹配以任何順序分組,即:"123...xy::ab..98765PQRS"
。
import re
print(re.findall(r'[0-9]+|[a-zA-Z]+|[.:]+', "ABC12345..::"))
# => ['ABC', '12345', '..::']
相關問題
- 1. 正則表達式接受字母或字母數字字符或帶有特殊符號的字母字符
- 2. Jasmine:在掃描別名時未發現預期的字母或數字字符
- 3. Java計數字母,數字和符號
- 4. 返回REGEX發現的非字母數字字符
- 5. SQL查詢發現超過1個非字母數字字符的字符串
- 6. 計算數組中的字母字符?
- 7. 刪除字符數組中的字母
- 8. CountChars數組字符串循環函數字母出現
- 9. 不是字母或數字的字符測試字符串
- 10. 分組通過數字或首字母
- 11. 無符號字符數組到寬字符數組/字符串
- 12. BeautifulSoup4發現或選擇串子begining包含非字母數字
- 13. 分割字母,數字的字符串,和標點符號
- 14. R刪除字符串中的非字母數字符號
- 15. 如果按下任意字母數字字符或符號,則滾動
- 16. 正則表達式從字符串中提取字母數字+符號組合
- 17. 得到前3個字母數字字符(只有數字或字母)
- 18. 如何按字母順序排序,但尊重組或符號?
- 19. 將字符串分割成數字或字母字符與JavaScript
- 20. 檢測字母,圓括號之間的數字特殊字符的組合
- 21. 蟒蛇再由字母數字和符號分割字符串
- 22. 正則表達式匹配字母數字字符和符號(&)
- 23. 只允許字母,數字,變音符號,+, - ,並在字符串
- 24. 如何保留重音字符,字母數字和符號
- 25. 如何測試只有字母或撇號的字符串?
- 26. 分割的字母數字字符串數組包含字母和數字字符分別
- 27. 分號字符在C++字符數組
- 28. C++發現無符號字符
- 29. 刪除括號額外的字母和數字的字符串
- 30. 計算字符串數組中的每個字母字符Java
你的意思是你想在拆分字母,數字和符號? –
您是否需要考慮像「ABC123DEF」這樣的情況? – DSM
是的,原則上三個「塊」中的字符集可以重疊。中間塊甚至可以是空的。所以,是的,這會導致問題。但對於我的具體問題,這種盡最大努力的方法工作得很好 – Christian