2015-11-29 14 views
5

Câu hỏi của tôi tương tự với số one này, nhưng với một số sửa đổi. Trước hết tôi cần sử dụng python và regex. Chuỗi của tôi là: 'Bốn điểm và bảy năm trước.' và tôi muốn chia nó bằng mỗi ký tự thứ 6, nhưng ngoài ra ở cuối nếu các ký tự không chia cho 6, tôi muốn trả về khoảng trống.regex tham lam chia python mỗi dòng thứ n

Tôi muốn để có thể đầu vào: 'Four score and seven years ago.'

Và lý tưởng nó nên đầu ra: ['Four s', 'core a', 'nd sev', 'en yea', 'rs ago', '. ']

Gần nhất tôi có thể nhận được là nỗ lực này, mà bỏ qua giai đoạn của tôi và không cho tôi khoảng trống

re.findall('.{%s}'%6,'Four score and seven years ago.') #split into strings 
['Four s', 'core a', 'nd sev', 'en yea', 'rs ago'] 

Trả lời

4

này rất dễ dàng để làm mà không có biểu thức thông thường:

>>> s = 'Four score and seven years ago.' 
>>> ss = s + 5*' '; [ss[i:i+6] for i in range(0, len(s) - 1, 6)] 
['Four s', 'core a', 'nd sev', 'en yea', 'rs ago', '.  '] 

này cung cấp chỗ trống không gian ở cuối mà bạn yêu cầu.

Ngoài ra, nếu bạn phải sử dụng biểu thức thông thường:

>>> import re 
>>> re.findall('.{6}', ss) 
['Four s', 'core a', 'nd sev', 'en yea', 'rs ago', '.  '] 

Mấu chốt trong cả hai trường hợp được tạo ra chuỗi ss trong đó có đủ không gian trống ở cuối.

+0

Tôi nghĩ bạn chỉ muốn thêm 5 dấu cách ('ss = s + 5 * '''). Sáu không gian hoạt động tốt với ví dụ phi regex; tuy nhiên, với ví dụ regex, bạn nhận được một phần tử cuối cùng bao gồm 6 khoảng trắng nếu độ dài chuỗi ban đầu của bạn là bội số của 6. –

+1

@MikeCovington Rất tốt! Cảm ơn. Tôi đã cập nhật câu trả lời để xử lý các chuỗi có độ dài là bội số của 6. – John1024

1

Bạn có thể sử dụng này:

>>> re.findall('(.{6}|.+$)', 'Four score and seven years ago.') 
['Four s', 'core a', 'nd sev', 'en yea', 'rs ago', '.'] 
3

Lý do bạn không nhận được các yếu tố thức có chứa một khoảng thời gian là chuỗi của bạn không phải là một bội số của 6. Vì vậy, bạn cần phải thay đổi regex của bạn để phù hợp với 1-6 ký tự tại một thời điểm:

>>> re.findall('.{1,6}','Four score and seven years ago.') 
['Four s', 'core a', 'nd sev', 'en yea', 'rs ago', '.'] 

để có được các padding mong muốn của nguyên tố cuối cùng của bạn, chỉ cần sử dụng này:

>>> [match.ljust(6, ' ') for match in re.findall('.{1,6}','Four score and seven years ago.')] 
['Four s', 'core a', 'nd sev', 'en yea', 'rs ago', '.  ']