2012-10-01 44 views
13

Tôi mới vào regex và tôi đang cố gắng để đưa ra một cái gì đó mà sẽ phù hợp với một văn bản như dưới đây:Regular Expression với ký tự đại diện để phù hợp với bất kỳ ký tự

ABC: (z) ngày 02 Tháng 1 1999 \ n

Ghi chú:

  • văn bản sẽ luôn luôn bắt đầu bằng "ABC:"
  • có thể có không, một hoặc nhiều khoảng trống giữa ':' và (z).
  • Các biến thể của (z) cũng có thể - (zz), (zzzzzz) .. vv nhưng luôn luôn là một nhân vật phi chữ số kèm theo trong "()"
  • có thể có không, một hoặc nhiều khoảng trống giữa (z) và Jan
  • tháng một có thể là tháng một, tháng một, vv
  • ngày couldbe ở định dạng bất kỳ và có thể/không chứa văn bản khác như một phần của nó để tôi thực sự muốn biết nếu có một regex tôi có thể sử dụng để chụp mọi thứ và mọi thứ được tìm thấy giữa '(z)' và '\ n'

Bất kỳ trợ giúp nào được đánh giá cao! Cảm ơn bạn

+2

bạn đã làm gì cố gắng cho đến nay? Nó làm gì khác với những gì bạn muốn? – octern

+0

Xin lưu ý: Tôi đang sử dụng regexplanet.com/advanced/java/index.html để kiểm tra các biểu thức chính quy của mình .. xin lỗi tôi đã đề cập đến điều này trước đó. Vì vậy, sử dụng chuỗi mẫu "ABC: (z) ngày 2 tháng 2 năm 1988 \ n" .. Kết quả của tôi cho Nhóm 2 phải là "(z) ngày 2 tháng 2 năm 1988" – chapstick

Trả lời

26

Sau đây nên làm việc:

ABC: *\([a-zA-Z]+\) *(.+) 

Giải thích:

ABC:   # match literal characters 'ABC:' 
*    # zero or more spaces 
\([a-zA-Z]+\) # one or more letters inside of parentheses 
*    # zero or more spaces 
(.+)   # capture one or more of any character (except newlines) 

Để có được nhóm mong muốn của bạn dựa trên các ý kiến ​​dưới đây, bạn có thể sử dụng như sau:

(ABC:) *(\([a-zA-Z]+\).+) 
+0

Cảm ơn bạn đã biểu đạt, vui lòng xem nhận xét của tôi cho deltree bên dưới – chapstick

+0

@chapstick - Đã thêm một phiên bản khác cần có nhóm 2 khớp từ dấu ngoặc đơn vào cuối dòng. –

+0

Cảm ơn bạn đã làm việc! – chapstick

0

Điều này sẽ đáp ứng các yêu cầu của bạn.

ABC:\s*(\(\D+\)\s*.*?)\\n

Dưới đây là với một số xét nghiệm http://www.regexplanet.com/cookbook/ahJzfnJlZ2V4cGxhbmV0LWhyZHNyDgsSBlJlY2lwZRiEjiUM/index.html

thêm tác đọc trên biểu thức thông thường: http://www.regular-expressions.info/characters.html

+0

Cảm ơn bạn đã trả lời. Tôi đang sử dụng http://www.regexplanet.com/advanced/java/index.html để kiểm tra các biểu thức chính quy của mình .. xin lỗi tôi đã đề cập đến điều này trước đó. Vì vậy, sử dụng chuỗi mẫu "ABC: (z) ngày 2 tháng 2 năm 1988 \ n" .. Kết quả của tôi cho Nhóm 2 phải là "(z) 2 tháng 2 năm 1988" ... Tôi không thể sử dụng một trong các biểu thức ở trên :( – chapstick

+0

@chapstick 'nắm bắt bất kỳ thứ gì và mọi thứ được tìm thấy giữa '(z)' và '\ n'' để bạn muốn (z) và \ n trong nhóm? Và tại sao nhóm 2? – deltree

+0

Tôi muốn (z) nhưng chỉ những thứ tối đa và không bao gồm '\ n'. Tôi cố ý tránh chi tiết lý do tại sao nhóm 2 .. một cái gì đó khác sẽ được sử dụng các giá trị trong nhóm 2 để làm tiếp tục xử lý :) – chapstick

4

Mà không biết việc thực hiện regex chính xác mà bạn đang làm cho sử dụng, tôi chỉ có thể đưa ra lời khuyên chung . (Cú pháp tôi sẽ perl như đó là những gì tôi biết, một số ngôn ngữ sẽ đòi hỏi tinh chỉnh)

Nhìn vào ABC: (z) jan 02 1999 \n

  • Điều đầu tiên để phù hợp là ABC: Vì vậy, sử dụng regex của chúng tôi là /ABC:/
  • Bạn nói ABC luôn ở đầu chuỗi vì vậy /^ABC/ sẽ đảm bảo rằng ABC ở đầu chuỗi.

  • Bạn có thể khớp không gian với chỉ thị \s (lưu ý trường hợp).Với tất cả các chỉ bạn có thể phù hợp với một hoặc nhiều hơn với + (hoặc 0 hoặc nhiều hơn với *)

  • Bạn cần phải thoát khỏi việc sử dụng () như đó là một nhân vật được bảo lưu. nên \(\)

  • Bạn có thể phù hợp với bất kỳ không gian phi hoặc ký tự xuống dòng với .

  • Bạn có thể phù hợp với bất cứ điều gì ở tất cả với .* nhưng bạn cần phải cẩn thận bạn không quá tham lam và chụp tất cả mọi thứ.

Vì vậy, để nắm bắt những gì bạn đã hỏi. Tôi sẽ sử dụng /^ABC:\s*\(.+?\)\s*(.+)$/

Mà tôi đọc như:

Bắt đầu với ABC:

Có thể có một số không gian

có (

có một số nhân vật

có)

có thể có một số khoảng trắng

sau đó chụp mọi thứ cho đến cuối dòng (là $).

tôi khuyên bạn nên giữ một bản sao trong các cách sau đẻ khoảng http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

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