Làm thế nào để trích xuất các phần cụ thể của một chuỗi lớn?


3

Ví dụ.

64d134a354eb2bf43626a73091514a2d:QMP0R\khOiPmkW1>bP,_-NTY4%-!P#:a123456
7d057d46b88f2cf4845dec57be4f3158:iR+LE[SQ\R~~o*+CCNL?i)mC>$G:U#:123321
6e0c116855a273f0c8c41dec1d21c160:s'?:fL2/mVj{&[`Onkyqf"y~47^YU#:abc123

Tất cả các chuỗi theo một mô hình ba phần. Hai phần đầu được phân tách bằng dấu hai chấm và phần tử bắt buộc sau dấu hai chấm.

Ngoại lệ: Trong phần hai của chuỗi, cũng tồn tại dấu hai chấm. (xem dòng thứ ba kết thúc bằng "abc123")

Đề xuất của tôi sẽ là đảo ngược tất cả các chuỗi và, sau khi thực hiện, loại bỏ tất cả các ký tự sau và bao gồm dấu hai chấm đầu tiên. Khi hoàn thành, đảo ngược văn bản một lần nữa để kết thúc với các yếu tố cần thiết, cần đọc:

a123456
123321
abc123

Lưu ý: Điều này được áp dụng cho một chuỗi lớn các chuỗi như vậy!

Câu trả lời:


3

Trong Notepad ++, bạn có thể sử dụng Tìm & amp; Thay thế tính năng để loại bỏ mọi thứ trước khi phân khúc thứ ba.

Chỉ cần sử dụng kết quả này, với nút radio Biểu thức chính quy trên:

^.*:(?!.*:)

Và thay thế bằng không có gì, sau đó nhấn Thay thế Tất cả.

enter image description here

Ý nghĩa của biểu thức là:

^       Ensure match begins at the start of the line
.*      Match any number of characters
:       Until it matches a colon (:)
(?!     And ensure that after the colon, there are no...
  .*:   Colon after any number of characters on the same line
)

Kết quả:

enter image description here


Nếu phần thứ ba cũng có thể chứa dấu hai chấm, nhưng nó sẽ luôn bắt đầu bằng #: Khi so sánh với các phần khác, sau đó bạn có thể sử dụng một biểu thức hơi khác cho tìm kiếm:

^.*#:

Và thay thế bằng không có gì.


1

Có một vài cách bạn có thể làm điều này.

Cách đơn giản nhất có lẽ là chỉ cần tải tệp của bạn trong trình soạn thảo văn bản Sublime và nhấp chuột giữa ctrl + ở đầu đoạn văn bản đầu tiên bạn muốn giữ (a123456) và kéo nhấp giữa xuống dưới cùng bên phải của tài liệu . Bạn nên làm nổi bật tất cả các văn bản mong muốn của bạn. Sau đó ctrl + c, ctrl + v vào một tệp mới. Điều này giả định rằng tất cả các dòng có văn bản mong muốn bắt đầu tại cùng một vị trí, trông giống như cột 67 từ ví dụ của bạn.

Nếu không, tải tệp lên cao siêu, nhấn ctrl + f, rồi bấm vào .* nút trong thanh công cụ tìm ở phía dưới. Tìm kiếm

#:(.*)

Nhấp vào tìm tất cả ở bên phải, sau đó sao chép và dán nó vào một tài liệu mới. Ctrl + f để tìm lại, tìm kiếm

^..

tìm lại tất cả và xóa Điều này khiến bạn không có gì ngoài chuỗi của bạn ở cuối (a123456, 123321, abc123)

Cái này hoạt động ra sao? Các .* nút tìm kiếm Biểu thức chính quy hoặc Regex. Regex xác định các quy tắc theo đó bạn khớp các mẫu văn bản. Quy tắc của bạn khá đơn giản ở đây: Tìm văn bản bắt đầu bằng #: và lấy tất cả mọi thứ sau nó. Bạn có thể đã thực hiện nó trong một bước, nhưng tôi chưa phải là người giỏi nhất với Regex. vì vậy những gì chúng tôi làm là tìm kiếm #:, theo sau là bất kỳ số nào ( * ) của bất kỳ nhân vật nào ( . ). Sau đó chúng tôi đã sao chép nó vào một tập tin mới.

Sau đó, chúng tôi phù hợp với sự khởi đầu ( ^ ) hai ký tự ( .. ) và chỉ cần xóa chúng để lại với văn bản chúng tôi muốn.

Tôi khuyên bạn nên sử dụng trình soạn thảo văn bản Sublime cho việc này vì nó miễn phí, nhanh chóng và tính năng tìm kiếm cho phép bạn rất dễ dàng chọn các nhóm văn bản bị ngắt kết nối và sao chép + dán chúng vào nơi khác. Notepad ++ cũng có thể làm điều đó nhưng tính năng regex của nó thêm một loạt các văn bản rác cho biết nơi nó tìm thấy các kết quả khớp, tất nhiên bạn không muốn.


0

Những gì tôi sẽ làm là lấy tất cả các chuỗi và nhập chúng vào excel hoặc một số chương trình bảng tính khác. sử dụng dấu hai chấm làm dấu phân cách cột và bạn sẽ có tất cả các phần tử trong cột thứ 3 của bảng.

Hầu hết dữ liệu sẽ ở cột thứ ba và một số sẽ ở cột thứ tư và có lẽ có nhiều trường hợp có nhiều dấu hai chấm trong dữ liệu nên tôi sẽ chèn một cột ở đầu, nhìn qua hàng và tìm ô cuối cùng với dữ liệu trong đó và đặt nó trong cột đầu tiên.

Một cái gì đó giống như công thức này mà tôi đã thử nghiệm trong Excel 2010:

= IF (ISBLANK (D1), C1, IF (ISBLANK (E1), D1, IF (ISBLANK (F1), E1, F1)))

sẽ xem qua các hàng C, D và E và đặt giá trị từ cột cuối cùng trong ô với phương trình.

Công thức này chỉ nhìn vào 3 cột, nó có thể được sửa đổi vô hạn

Nếu bạn sử dụng điền vào để điền vào cột, bạn sẽ nhận được câu trả lời bạn đang tìm kiếm trong col A.


0

Bạn là một trình soạn thảo văn bản với khả năng tìm kiếm regex và thay thế. Thuật ngữ tìm kiếm của bạn phải là:

.*:(.*)

Thay thế bằng nên là:

\1

Tôi đã sử dụng Sublime Text, nhưng notepad2 / Notepad ++ sẽ hoạt động.

Regex giải thích:

.* - Matches any number of characters
:  - Match a colon
(.*) - Match any number of character as a subgroup

Sau đó \1 thay thế toàn bộ dòng phù hợp với nội dung của nhóm con (văn bản bạn muốn). Regex mặc định là tham lam (trong hầu hết các triển khai) và sẽ khớp với các chuỗi dài nhất có thể. Điều đó có nghĩa là regex này sẽ khớp với càng nhiều ký tự càng tốt trước phần thứ hai của regex (dấu hai chấm theo sau bởi bất kỳ số lượng ký tự nào).

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.