Làm thế nào để chụp một vài dòng xung quanh một trận đấu regex?


8

Tôi đang tìm kiếm một biểu thức regex để khớp một vài dòng trên dòng phù hợp. Ví dụ:

ABCDEFGHADEFGH
ABCDEFGHADEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
XXXXXXXX

Tôi muốn chụp 2 dòng phía trên XXXXXXXX.

Bất kỳ trợ giúp sẽ được đánh giá cao. Lưu ý: với Python sử dụng thư viện lại


1
Dùng phần mềm gì? Các chương trình khác nhau có những ý tưởng khác nhau về việc regrec là gì.
David Richerby

Sử dụng Python cụ thể hoặc trong bất kỳ công cụ / ngôn ngữ?
kenorb

Nếu bạn đang sử dụng python, có thể tốt hơn là kết xuất toàn bộ vào một mảng, trong đó mỗi hàng là thành phần riêng của nó. Sau đó, bạn lặp qua mảng, tìm XXXXXXXX, một khi tìm thấy, sử dụng chỉ mục của mục đó -1 và -2 để lấy các dòng.
LPChip

chào người đàn ông cảm ơn vì lời khuyên, tôi đã làm điều đó với một vòng lặp for nhưng tự hỏi làm thế nào với regex
takobaba

Câu trả lời:


15

RegEx sau đây kiểm tra số lượng dòng khác nhau trước XXXXXXXXdòng và trả về chúng trong nhóm chụp đầu tiên.

((.*\n){2})XXXXXXXX

  1. (.*\n)kiểm tra một chuỗi kết thúc bằng \n, một dòng mới.
  2. {2} định lượng này 2 lần.
  3. () xung quanh đó đảm bảo tất cả các dòng đến trong một nhóm chụp.
  4. XXXXXXXX là chuỗi mà văn bản phải kết thúc.

Bây giờ trong Python, bạn có thể sử dụng p.match(regex)[0]để trả về nhóm chụp đầu tiên.


4
Hãy cảnh giác điều này có thể gây ra vấn đề trên Windows. Nếu có, hãy thử \r\nthay vì chỉ \n.
Qix - MONICA ĐƯỢC PHÂN BIỆT

1
Tất nhiên, điều này sẽ chỉ khớp với một dòng bắt đầu bằng XXXXXXXX(nhưng nó không nhất thiết phải kết thúc bằng XXXXXXXX).
G-Man nói 'Tái lập Monica'

0

Thêm vào câu trả lời của erikgaal, sử dụng thêm. * Trước xxxxxx, để khớp với bất kỳ tab / khoảng trắng nào.

((. * \ n) {2}). * Xxxxxxx


1
Vâng, .*sẽ không phù hợp chỉ tab / không gian; nó sẽ phù hợp với mọi thứ (ví dụ: "XXXXXXX màu nâu nhanh").
G-Man nói 'Tái lập Monica'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.