Python regex khớp với giá trị khóa
Thông tin được tìm nạp bằng yêu cầu JSONP, yêu cầu này chứa văn bản quảng cáo và liên kết đến hình ảnh quảng cáo. Tệp JSON và hình ảnh được tìm nạp từ buysellads. com hoặc buysellads. net Show Nếu bạn có bất kỳ câu hỏi hoặc thắc mắc nào, xin vui lòng gửi email Mẹo này minh họa một giải pháp sử dụng Qt. Bản thân biểu thức chính quy có thể được sử dụng với bất kỳ công cụ biểu thức chính quy nào tương thích với PERL. Bạn có thể tìm thấy cuộc thảo luận giúp tôi viết Mẹo này tại Diễn đàn RegEx Giới thiệuBạn nói, phân tích một cặp Khóa-Giá trị không khó lắm sao? Key1=Value1 Key2=Value2 Nhưng nếu chúng ta tiến lên một chút thì sao? Key1=Value 1 Key2=Value Key3=Value 3 Chúng tôi đến một nơi nào đó, như bạn có thể thấy. Nhưng tôi muốn nhiều hơn. Tôi muốn giá trị có thể chứa mọi thứ. Tất nhiên, điều này dẫn chúng ta đến một vấn đề, bởi vì '=' đã được dành riêng làm dấu phân cách giữa Khóa và Giá trị - Có thể giải quyết được bằng cách thoát dấu '=' nếu nó xảy ra trong một giá trị. Tôi đã tạo ra ví dụ thực tế này khi mẫu này có thể được sử dụng ErrorMessage=The file was not found. Path\=C:/Temp/File.txt ErrorNumber=12312 Sử dụng biểu thức chính quyGiải pháp được trình bày ở đây là khả thi trong mọi công cụ biểu thức chính quy tương thích với PERL, mặc dù tôi sẽ sử dụng Qt để chứng minh việc sử dụng nó. Regex trông khá mất tập trung nếu bạn nhìn vào nó lần đầu tiên ^((\b[^\s=]+)=(([^=]|\\=)+))*$ Thoạt nhìn regex có vẻ lạ, nhưng ngay sau khi bạn đặt nó vào Expresso, bạn có thể thấy ý nghĩa của nó rõ ràng hơn Về cơ bản, regex chứa hai nhóm chụp khác nhau, một nhóm là khóa ((\b[^\s=]+)) và nhóm còn lại là giá trị ((([^=]. \\=)+)). Hai lần chụp này phải được phân tách bằng dấu '='. Một khóa có thể chứa bất kỳ thứ gì ngoại trừ khoảng trắng hoặc '=' và một giá trị có thể chứa bất kỳ thứ gì ngoại trừ '=' không thoát. Mỗi chuỗi có thể xảy ra với bất kỳ số lần lặp lại nào Bây giờ bạn đã biết về cơ bản regex làm gì, bạn cũng cần có khả năng phân tích cú pháp một chuỗi bằng cách sử dụng regex đã mô tả trước đó. Một cái gì đó quan trọng cũng vẫn còn để nói. Biểu thức chính quy được đề xuất chỉ trả về cặp Khóa-Giá trị cuối cùng, do đó chúng tôi cần xử lý chuỗi đầu vào nhiều lần //Regular expression as descripted at // http://www.codeproject.com/Tips752372/Parsing-a-Key-Value-pair-with-a-Regular-Expression QRegularExpression regex("^((\\b[^\\s=]+)=(([^=]|\\\\=)+))*$"); QString example = "ErrorMessage=File wasn't found_Path\=C:/Temp/File.txt ErrorNumber=12312"; while(example.length() > 0){//As long there is stuff in example //Get the last Key-Value pair from the RegEx QRegularExpressionMatch keyValueRegexMatch = keyValueRegex.match(keyValueRawData); //Output the found Key-Value Pair qDebug()<<"Key="< Giải pháp trên không phải là hoàn hảo, nhưng nó cần một số điều chỉnh. Nếu một nhóm đã chụp không ở cuối chuỗi, thì khoảng cách giữa Giá trị và khóa sau sẽ không bị xóa Thật thú vị khi các biểu thức chính quy mạnh mẽ như thế nào. Nhưng ví dụ này cũng cho tôi thấy rằng không phải tất cả các công cụ biểu thức chính quy đều hoạt động theo cùng một cách và đôi khi bạn cần chỉnh sửa một biểu thức chính quy để nó hoạt động trên một công cụ cụ thể, mặc dù nó đã hoạt động hoàn hảo với một công cụ khác. Tôi đã thử nghiệm biểu thức chính quy này với công cụ biểu thức chính quy Qt (chính xác là QRegularExpression - Xem tại đây để biết sự khác biệt với QRegExp) và. Net, nhưng tôi tự tin rằng nó sẽ hoạt động tốt với hầu hết các công cụ regex phổ biến hiện có Giấy phépBài viết này, cùng với bất kỳ mã nguồn và tệp liên quan nào, được cấp phép theo Giấy phép Mở Dự án Mã (CPOL) Làm cách nào tôi có thể truy cập giá trị của khóa bằng Regex trong Python? . Thanks Những gì tôi đã thử Tôi đã thử những cách không liên quan đến câu hỏi và tôi hiểu rằng mình nên sử dụng cách này Tôi sẽ sử dụng hỗ trợ JSON tích hợp, nó linh hoạt hơn nhiều Nhưng mà. nếu bạn phải sử dụng Regex, bạn có thể thử (?<=\"THE_KEY\"\s*:\s*\").+?(?=\") Nếu bạn định chơi với các biểu thức chính quy, thì hãy lấy một bản sao của Expresso[^] - nó miễn phí và nó sẽ kiểm tra và tạo Regexes Thêm giải pháp của bạn ở đây B I U S small BIG code Xem trước 0thành viên hiện cóhoặc tham gia với chúng tôiTải xuống, Bình chọn, Nhận xét, Xuất bản Email của bạnEmail này đang được sử dụng. Bạn có cần mật khẩu của bạn? Mật khẩu tùy chọnKhi trả lời một câu hỏi xin vui lòng
Nội dung này, cùng với bất kỳ tệp và mã nguồn liên quan nào, được cấp phép theo Giấy phép Mở Dự án Code (CPOL) |