2017-07-19 21 views
6

Tôi đang cố gắng làm điều gì đó khá đơn giản với biểu thức chính quy trong python ... đó là điều tôi nghĩ ít nhất.Cụm từ thông dụng: các từ phù hợp giữa khoảng trắng

Điều tôi muốn làm là đối sánh các từ từ một chuỗi nếu nó đứng trước và sau đó là khoảng trắng. Nếu nó ở đầu chuỗi không có khoảng trắng cần thiết trước đó - nếu nó ở cuối, cũng không tìm kiếm khoảng trắng.

Ví dụ:

"WordA WordB WordC-WordD WordE" 

Tôi muốn để phù hợp với WordA WordB WordE.

tôi chỉ vỏn vẹn có cách overcomplicated để làm điều này ...

(?<=(?<=^)|(?<=\s))\w+(?=(?=\s)|(?=$)) 

Dường như với tôi phải có một cách đơn giản cho một vấn đề đơn giản như vậy .... I figured tôi chỉ có thể bắt đầu với (?<=\s|^) nhưng điều đó dường như không thể bởi vì "nhìn phía sau yêu cầu mẫu có chiều rộng cố định".

Trả lời

6

Bạn có vẻ làm việc trong Python là (?<=^|\s) là hoàn toàn hợp lệ trong PCRE, Java và Ruby (và .NET regex hỗ trợ các mẫu lookbehind chiều rộng vô hạn).

Sử dụng

(?<!\S)\w+(?!\S) 

Nó sẽ phù hợp với 1 hoặc nhiều ký tự chữ được kèm theo khoảng trắng hoặc bắt đầu/kết thúc của chuỗi.

Xem regex demo.

Pattern chi tiết:

  • (?<!\S) - một lookbehind tiêu cực mà không trận đấu khi động cơ tìm thấy một char không khoảng trắng ngay bên trái của vị trí hiện tại
  • \w+ - 1 hoặc nhiều từ chars
  • (?!\S) - một dấu hiệu tiêu cực không khớp khi công cụ tìm thấy một khoảng trắng không khoảng trắng ngay bên phải vị trí hiện tại.
+0

có ý nghĩa! Cảm ơn. Tôi đoán tìm kiếm nonwhitespace thay vì khoảng trắng là dễ dàng hơn nhiều. – SyntaxError

+0

Không chắc chắn nó dễ dàng hơn, nhưng hiệu quả hơn. –

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