Tôi muốn phân tách các chuỗi như thế này
'foofo21'
'bar432'
'foobar12345'
vào trong
['foofo', '21']
['bar', '432']
['foobar', '12345']
Có ai đó biết một cách dễ dàng và đơn giản để làm điều này trong Python?
hỏi ngày 9 tháng 1 năm 2009 lúc 23:02Jan 9, 2009 at 23:02
Tôi sẽ tiếp cận điều này bằng cách sử dụng
['foofo', '21']
['bar', '432']
['foobar', '12345']
7 theo cách sau:import re
match = re.match[r"[[a-z]+][[0-9]+]", 'foofo21', re.I]
if match:
items = match.groups[]
print[items]
>> ["foofo", "21"]
Đã trả lời ngày 9 tháng 1 năm 2009 lúc 23:12Jan 9, 2009 at 23:12
Evan Fosmarkevan FosmarkEvan Fosmark
96.2K34 Huy hiệu vàng104 Huy hiệu bạc117 Huy hiệu đồng34 gold badges104 silver badges117 bronze badges
8
def mysplit[s]:
head = s.rstrip['0123456789']
tail = s[len[head]:]
return head, tail
>>> [mysplit[s] for s in ['foofo21', 'bar432', 'foobar12345']]
[['foofo', '21'], ['bar', '432'], ['foobar', '12345']]
Giorgos Xou
1.0411 huy hiệu vàng8 Huy hiệu bạc23 Huy hiệu đồng1 gold badge8 silver badges23 bronze badges
Đã trả lời ngày 10 tháng 1 năm 2009 lúc 6:17Jan 10, 2009 at 6:17
MikemikeMike
1.0366 huy hiệu bạc7 huy hiệu đồng6 silver badges7 bronze badges
7
Một lựa chọn khác:
>>> [re.split[r'[\d+]', s] for s in ['foofo21', 'bar432', 'foobar12345']]
[['foofo', '21', ''], ['bar', '432', ''], ['foobar', '12345', '']]
Đã trả lời ngày 10 tháng 1 năm 2009 lúc 0:54Jan 10, 2009 at 0:54
JFSJFSjfs
384K183 Huy hiệu vàng949 Huy hiệu bạc1621 Huy hiệu Đồng183 gold badges949 silver badges1621 bronze badges
2
>>> r = re.compile["[[a-zA-Z]+][[0-9]+]"]
>>> m = r.match["foobar12345"]
>>> m.group[1]
'foobar'
>>> m.group[2]
'12345'
Vì vậy, nếu bạn có một danh sách các chuỗi có định dạng đó:
import re
r = re.compile["[[a-zA-Z]+][[0-9]+]"]
strings = ['foofo21', 'bar432', 'foobar12345']
print [r.match[string].groups[] for string in strings]
Output:
[['foofo', '21'], ['bar', '432'], ['foobar', '12345']]
Đã trả lời ngày 9 tháng 1 năm 2009 lúc 23:12Jan 9, 2009 at 23:12
0
Evan Fosmarkevan Fosmark
>>> strings = ['foofo21', 'bar432', 'foobar12345']
>>> [re.findall[r'[\w+?][\d+]', s][0] for s in strings]
[['foofo', '21'], ['bar', '432'], ['foobar', '12345']]
96.2K34 Huy hiệu vàng104 Huy hiệu bạc117 Huy hiệu đồng
Giorgos XouJan 9, 2009 at 23:40
1.0411 huy hiệu vàng8 Huy hiệu bạc23 Huy hiệu đồngPEZ
Đã trả lời ngày 10 tháng 1 năm 2009 lúc 6:177 gold badges42 silver badges65 bronze badges
3
Mikemike
['foofo', '21']
['bar', '432']
['foobar', '12345']
0
1.0366 huy hiệu bạc7 huy hiệu đồng
Một lựa chọn khác:5 gold badges32 silver badges43 bronze badges
Đã trả lời ngày 10 tháng 1 năm 2009 lúc 0:54Aug 5, 2019 at 13:44
JFSJFSBryo Much
384K183 Huy hiệu vàng949 Huy hiệu bạc1621 Huy hiệu Đồng1 silver badge2 bronze badges
['foofo', '21']
['bar', '432']
['foobar', '12345']
1Vì vậy, nếu bạn có một danh sách các chuỗi có định dạng đó:Nov 19, 2015 at 19:28
Tôi luôn là người đưa ra findall [] =]
['foofo', '21']
['bar', '432']
['foobar', '12345']
2Lưu ý rằng tôi đang sử dụng Regex đơn giản hơn [ít hơn để loại] so với hầu hết các câu trả lời trước đó.
['foofo', '21']
['bar', '432']
['foobar', '12345']
3Đã trả lời ngày 9 tháng 1 năm 2009 lúc 23:40Apr 25, 2019 at 6:27
Pezpez
['foofo', '21']
['bar', '432']
['foobar', '12345']
416.6K7 Huy hiệu vàng42 Huy hiệu bạc65 Huy hiệu ĐồngOct 8, 2020 at 12:38
Dưới đây là một hàm đơn giản để tách rời nhiều từ và số từ một chuỗi có độ dài nào, phương thức RE chỉ tách biệt hai từ và số đầu tiên. Tôi nghĩ rằng điều này sẽ giúp mọi người khác trong tương lai,
['foofo', '21']
['bar', '432']
['foobar', '12345']
5
Nikaido
4.1365 Huy hiệu vàng32 Huy hiệu bạc43 Huy hiệu đồng18 gold badges31 silver badges51 bronze badges
Đã trả lời ngày 5 tháng 8 năm 2019 lúc 13:44Sep 22, 2019 at 18:27
1
Bryo Manybryo nhiều
['foofo', '21']
['bar', '432']
['foobar', '12345']
6811 Huy hiệu bạc2 Huy hiệu đồng
Đã trả lời ngày 19 tháng 11 năm 2015 lúc 19:28May 18 at 18:42