2011-01-04 47 views
6

Giả sử rằng tôi có một số chuỗi: "Lorem ipsum dolor sit amet" Tôi cần một danh sách tất cả các từ có chiều dài hơn 3. Tôi có thể làm điều đó với biểu thức chính quy không?Danh sách tất cả các từ phù hợp với cụm từ thông dụng

ví dụ:

pattern = re.compile(r'some pattern') 
result = pattern.search('Lorem ipsum dolor sit amet').groups() 

kết quả chứa 'Lorem', 'ipsum', 'dolor' và 'amet'.

CHỈNH SỬA:

Từ mà tôi muốn nói chỉ có thể chứa chữ cái và số.

+0

Bạn có nghĩa là kí tự ASCII, hoặc là chữ quốc tế như ký tự có dấu vv cũng có liên quan? –

Trả lời

14
>>> import re 
>>> myre = re.compile(r"\w{4,}") 
>>> myre.findall('Lorem, ipsum! dolor sit? amet...') 
['Lorem', 'ipsum', 'dolor', 'amet'] 

Hãy lưu ý rằng trong Python 3, nơi tất cả các chuỗi là Unicode, điều này cũng sẽ tìm các từ sử dụng các chữ cái không phải ASCII:

>>> import re 
>>> myre = re.compile(r"\w{4,}") 
>>> myre.findall('Lorem, ipsum! dolör sit? amet...') 
['Lorem', 'ipsum', 'dolör', 'amet'] 

Trong Python 2, bạn sẽ phải sử dụng

>>> myre = re.compile(r"\w{4,}", re.UNICODE) 
>>> myre.findall(u'Lorem, ipsum! dolör sit? amet...') 
[u'Lorem', u'ipsum', u'dol\xf6r', u'amet'] 
2

Đó là một trường hợp tipical sử dụng cho comprehensions danh sách bằng Python, có thể được sử dụng để lọc:

text = 'Lorem ipsum dolor sit amet' 
result = [word for word in pattern.findall(text) if len(word) > 3] 
+0

nhưng nếu tôi có "Lorem, ipsum" thì sao? Biểu thức này sẽ trả về 'Lorem', 'ipusm'. Tôi không cần dấu phẩy. – szaman

+0

Ok - Tôi đã cập nhật nó để thực sự sử dụng regex - các sanswer khác giả sử bạn thậm chí sẽ không cần regex. Phương pháp "findall" của regexes là những gì bạn thiếu. – jsbueno

2

pattern = re.compile("\w\w\w(\w+)")
result = pattern.search('Lorem ipsum dolor sit amet').groups()

+0

"Bây giờ bạn đã có hai vấn đề." : D http://regex.info/blog/2006-09-15/247 – daramarak

0
pattern = re.compile(r'(\S{4,})') 
pattern.findall('Lorem ipsum dolor sit amet') 
['Lorem', 'ipsum', 'dolor', 'amet'] 
+0

bỏ qua câu trả lời của tôi. Các trường hợp xử lý của Tim Pietzcker như "ngồi"? đúng – albertov

Các vấn đề liên quan