2010-01-21 39 views
14

Nói rằng tôi có một câu:Matching tất cả các từ ngoại trừ một

Tôi là một người mua tốt và cậu bé xấu quá

Làm thế nào để chọn từng chữ trừ cậu bé trong câu này sử dụng biểu thức chính quy?

+3

Trong ngôn ngữ/môi trường nào? Và bạn có ý gì khi "chọn từng từ"? Riêng biệt? Cùng với nhau? –

+3

Ngôn ngữ? Kết quả mong muốn? –

+2

sử dụng regularexpression. – pokrate

Trả lời

33

Bạn có thể sử dụng cái nhìn tiêu cực đằng sau:

\w+\b(?<!\bboy) 

Hoặc tiêu cực nhìn về phía trước từ không phải tất cả đều hỗ trợ cái nhìn tiêu cực phía sau

(?!boy\b)\b\w+ 

Bạn có thể đọc về cái nhìn tiêu cực trước here

+0

câu trả lời chính xác được chọn tại đây http://www.gskinner.com/RegExr/ – pokrate

5

Ngôn ngữ nào? Tại sao bạn muốn sử dụng regex?

answer = yourString.Replace("boy", ""); 
+0

-1 Đây là câu trả lời ngớ ngẩn. – cletus

+6

Ngớ ngẩn vì? Thông số kỹ thuật không rõ ràng và giải pháp này phù hợp với một trong các cách giải thích. –

+2

Lưu ý OP cho biết "từ". Điều này sẽ phù hợp với partials. Vì vậy, nếu bạn muốn bỏ qua "top" và bạn đã làm điều này thay thế bạn cũng nhấn "dừng lại". Vì vậy, câu trả lời này là ngớ ngẩn bởi vì nó không phải là một thay thế * không cần thiết * mà không giải quyết được vấn đề, bỏ qua vấn đề ranh giới từ và chỉ giới thiệu nhiều vấn đề hơn. – cletus

1

thay thế cậu bé không có gì ... trong Perl đó sẽ là:

s/boy //g 
+0

Thậm chí tốt hơn, hãy xóa 'boy' (tức là boy + space) –

+0

Khá đúng, tôi đã cập nhật câu trả lời cho phù hợp ... –

3
/\b(?!boy)\S+/g 
+0

Đây là chính xác những gì tôi cần :) –

8

Hãy thử:

\b(?!boy\b).*?\b 

có nghĩa là:

  • Zero, nghỉ từ chiều rộng (\b)
  • Đó isn 't theo sau là "cậu bé" và một từ khác;
  • theo sau là bất kỳ ký tự nào theo cách không tham lam;
  • Cho đến khi ngắt từ khác.

Lưu ý: giờ nghỉ từ phù hợp với sự khởi đầu của chuỗi, kết thúc của chuỗi và bất kỳ chuyển đổi từ từ (số, chữ hoặc dấu gạch dưới) để nhân vật không-word hoặc ngược lại.

+0

Câu trả lời sai, rõ ràng không chọn bất cứ điều gì cả. – pokrate

2

Nếu bạn sử dụng "boy" làm splitter, bạn sẽ nhận được các phần còn lại. Bạn có thể sử dụng chúng làm phím chọn.

>>> re.split("boy","I am a good buy and bad boy too") 
['I am a good buy and bad ', ' too'] 
Các vấn đề liên quan