13
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Giả sử rằng tôi có câu sau:
bean likes to sell his beansVà tôi muốn thay thế tất cả các từ của các từ cụ thể bằng các từ khác. Ví dụ: bean đến >>> "bean likes to sell his beans".replace("bean","robert") 'robert likes to sell his roberts' 0 và >>> "bean likes to sell his beans".replace("bean","robert") 'robert likes to sell his roberts' 1 đến >>> "bean likes to sell his beans".replace("bean","robert") 'robert likes to sell his roberts' 2.
Tôi không thể sử dụng >>> "bean likes to sell his beans".replace("bean","robert") 'robert likes to sell his roberts' 3 bởi vì trong trường hợp này, nó sẽ thay đổi >>> "bean likes to sell his beans".replace("bean","robert") 'robert likes to sell his roberts' 1 thành >>> "bean likes to sell his beans".replace("bean","robert") 'robert likes to sell his roberts' 5.
>>> "bean likes to sell his beans".replace("bean","robert") 'robert likes to sell his roberts'Tôi chỉ cần thay đổi toàn bộ các từ, không phải là sự xuất hiện của từ trong từ khác. Tôi nghĩ rằng tôi có thể đạt được điều này bằng cách sử dụng các biểu thức thông thường nhưng không biết làm thế nào để làm đúng.
Bhargav Rao
47.4K27 Huy hiệu vàng122 Huy hiệu bạc137 Huy hiệu đồng27 gold badges122 silver badges137 bronze badges
Hỏi ngày 2 tháng 9 năm 2014 lúc 20:19Sep 2, 2014 at 20:19
FrozenheartfrozenheartFrozenHeart
19.1K32 Huy hiệu vàng111 Huy hiệu bạc232 Huy hiệu Đồng32 gold badges111 silver badges232 bronze badges
0
Nếu bạn sử dụng Regex, bạn có thể chỉ định các ranh giới từ với >>> "bean likes to sell his beans".replace("bean","robert") 'robert likes to sell his roberts' 6:
import re sentence = 'bean likes to sell his beans' sentence = re.sub(r'\bbean\b', 'robert', sentence) # 'robert likes to sell his beans'Ở đây 'Đậu' không thay đổi (thành 'Roberts') vì 'S' ở cuối không phải là ranh giới giữa các từ: >>> "bean likes to sell his beans".replace("bean","robert") 'robert likes to sell his roberts' 6 khớp với chuỗi trống, mà chỉ ở đầu hoặc cuối của một từ.
Sự thay thế thứ hai cho sự hoàn chỉnh:
sentence = re.sub(r'\bbeans\b', 'cars', sentence) # 'robert likes to sell his cars'Đã trả lời ngày 2 tháng 9 năm 2014 lúc 20:24Sep 2, 2014 at 20:24
Alex Rileyalex RileyAlex Riley
158K44 Huy hiệu vàng251 Huy hiệu bạc232 Huy hiệu Đồng44 gold badges251 silver badges232 bronze badges
2
Nếu bạn thay thế từng từ một lần, bạn có thể thay thế các từ nhiều lần (và không nhận được những gì bạn muốn). Để tránh điều này, bạn có thể sử dụng chức năng hoặc Lambda:
d = {'bean':'robert', 'beans':'cars'} str_in = 'bean likes to sell his beans' str_out = re.sub(r'\b(\w+)\b', lambda m:d.get(m.group(1), m.group(1)), str_in)Theo cách đó, một khi bean được thay thế bằng >>> "bean likes to sell his beans".replace("bean","robert") 'robert likes to sell his roberts' 0, nó sẽ không được sửa đổi nữa (ngay cả khi >>> "bean likes to sell his beans".replace("bean","robert") 'robert likes to sell his roberts' 0 cũng nằm trong danh sách từ đầu vào của bạn).
Theo đề xuất của Georg, tôi đã chỉnh sửa câu trả lời này với import re sentence = 'bean likes to sell his beans' sentence = re.sub(r'\bbean\b', 'robert', sentence) # 'robert likes to sell his beans' 1. Giải pháp thay thế (cũng được đề xuất bởi Georg):georg, I edited this answer with import re sentence = 'bean likes to sell his beans' sentence = re.sub(r'\bbean\b', 'robert', sentence) # 'robert likes to sell his beans' 1. Alternative solution (also suggested by georg):
str_out = re.sub(r'\b(%s)\b' % '|'.join(d.keys()), lambda m:d.get(m.group(1), m.group(1)), str_in)Đã trả lời ngày 2 tháng 9 năm 2014 lúc 20:38Sep 2, 2014 at 20:38
10
Đây là một cách bẩn thỉu để làm điều này. Sử dụng nếp gấp
reduce(lambda x,y : re.sub('\\b('+y[0]+')\\b',y[1],x) ,[("bean","robert"),("beans","cars")],"bean likes to sell his beans")Đã trả lời ngày 3 tháng 11 năm 2015 lúc 4:08Nov 3, 2015 at 4:08
Akshay Hazariakshay HazariAkshay Hazari
3.0393 Huy hiệu vàng43 Huy hiệu bạc76 Huy hiệu đồng3 gold badges43 silver badges76 bronze badges
"bean likes to sell his beans".replace("beans", "cars").replace("bean", "robert")
Sẽ thay thế tất cả các trường hợp "đậu" bằng "xe hơi" và "đậu" bằng "robert". Điều này hoạt động vì import re sentence = 'bean likes to sell his beans' sentence = re.sub(r'\bbean\b', 'robert', sentence) # 'robert likes to sell his beans' 2 trả về một thể hiện được sửa đổi của chuỗi gốc. Như vậy, bạn có thể nghĩ về nó trong các giai đoạn. Nó về cơ bản hoạt động theo cách này:
>>> first_string = "bean likes to sell his beans" >>> second_string = first_string.replace("beans", "cars") >>> third_string = second_string.replace("bean", "robert") >>> print(first_string, second_string, third_string) ('bean likes to sell his beans', 'bean likes to sell his cars', 'robert likes to sell his cars')Đã trả lời ngày 2 tháng 9 năm 2014 lúc 20:22Sep 2, 2014 at 20:22
Kevin LondonKevin LondonKevin London
4.5341 Huy hiệu vàng20 Huy hiệu bạc26 Huy hiệu đồng1 gold badge20 silver badges26 bronze badges
1