2012-12-20 59 views
5

Mới đối với Regex Ví dụ tôi đã thấy chương trình tìm kiếm ngoại lệ rất cụ thể, ví dụ: thư combo cụ thể.cách sử dụng regex để lấy từ thứ tám

Điều tôi muốn là lấy từ thứ 8 bất kể điều gì xảy ra trước đây, bất kể từ đó là gì.

Vì vậy, không gian là những gì chỉ định dòng

mẫu 'từ' sẽ

ngày 20 tháng 9 11:13:18 10.50.3.100 ngày 20 tháng 9 11:13:15 DC1ASM1.dcl.greendotcorp.com Blah Blah Blah

Tôi muốn trích xuất tên máy chủ lưu trữ, trong trường hợp này là "DC1ASM1.dcl.greendotcorp.com", luôn được bắt đầu bằng mẫu "Tháng, Ngày, Dấu thời gian, IP, Tháng, Ngày, Dấu thời gian".

Cảm ơn Rex

+0

gì ngôn ngữ/công cụ bạn đang làm việc tại? Nếu bạn có quyền truy cập vào một dòng lệnh Unix, tiện ích 'cut' được xây dựng cho điều này, và vì nó trông giống như dữ liệu nhật ký có vẻ như có khả năng xảy ra. –

+0

Cảm ơn bạn Michael. Đây là python (nhưng thông qua một công cụ) – user1917424

Trả lời

1

biểu hiện này sẽ nắm bắt được tên máy chủ trong nhóm có tên HostName. Nó giả định luôn có những khoảng trống duy nhất.

^([^ ]+){7}(?<HostName>[^ ]+) 

Hai xử lý nhiều dấu cách sử dụng biểu thức sau.

^([^ ]+ +){7}(?<HostName>[^ ]+) 

Để hỗ trợ các tab, hãy sử dụng biểu thức sau.

^([^ \t]+[ \t]+){7}(?<HostName>[^ \t]+) 
+0

^([^] +) {7} (? [^] +) là hoàn hảo. Cảm ơn bạn. – user1917424

3

Tôi không chắc chắn 100% những gì phiên bản hay hương vị của regex bạn đang sử dụng, vì vậy tôi sẽ tránh được những cái nhìn-phía sau và sử dụng một nhóm chụp không thay:

^(?:\S+?\s){7}(\S+) 

Điều đó liên kết với phần đầu của dòng, bỏ qua 7 mẫu liên tiếp là [bất kỳ ký tự nào nhưng khoảng trắng] 1 lần] sau đó [một ký tự trắng đơn lẻ].

Bạn có thể cụ thể hơn về "từ" bằng cách sử dụng \w thay vì \S nếu bạn đã chọn.

+4

+1 cho nhóm không bắt nhưng bạn không nên thực sự cần '?' Bởi vì '\ S' và' \ s' là loại trừ lẫn nhau –

1

Hãy thử cái gì đó như:

regex = "([^\s]+\s+){7}(?<eighthword>[^\s]+)" 
+1

OP không nói hương vị regex nào anh ta sử dụng, vì vậy bạn không thể biết [các nhóm được đặt tên] (http://www.regular-expressions.info/named.html) có sẵn. Ngoài ra, '\ w +' sẽ không hoạt động trong trường hợp này bởi vì một số từ chứa các ký tự "không phải từ" như '.' và': '. –

+0

Có lẽ bạn có thể nghĩ về nó như là mã pseudo regex nếu điều đó giúp bạn. Chú ý đặt một cách cẩn thận 'một cái gì đó như', tôi đã nhấn mạnh cho sự quan tâm của bạn. Được thiết kế để đưa ra một ý tưởng. Việc triển khai được để lại cho người đọc quan tâm. Cảm ơn bạn đã quan sát \ w, tuy nhiên. Đó là phần hữu ích. Có lẽ bạn muốn đóng góp một câu trả lời. Bạn có thể giải thích thêm về các nhóm được đặt tên là gì không? Tôi nghĩ đó là điều mà bạn phải biết, kể từ khi bạn liên kết với nó. –

+0

Ngoài ra, bạn có thể giải thích sự khác biệt trong các nhóm được đặt tên trên các 'hương vị' của regex không? Vì bạn cũng có vẻ biết về chủ đề hữu ích đó. –