2011-02-07 27 views
6

Tôi đang tìm để trích xuất,

ID=(?P<group>.+?);

từ một chuỗi, 'ID =' là một hằng số, nhóm có thể được bất cứ điều gì . Vị trí của đối sánh sẽ khác nhau trong chuỗi.

Điều này là tốt trong hầu hết các trường hợp, tuy nhiên, đôi khi trận đấu sẽ ở cuối chuỗi và dấu chấm phẩy sẽ bị thiếu. Trong trường hợp này, làm cách nào để tùy chọn khớp với phần cuối của chuỗi? Tôi đã thử những điều sau:

ID=(?P<group>.+?)[;$] 

Nhưng điều này dường như không hoạt động, tôi tưởng tượng vì $ không phải là ký tự (nó là một neo?).

Điều này đang được thực hiện bằng Python sử dụng mô-đun tái, và tất cả các hành vi bình thường như sử dụng chuỗi thô đã được tính (tôi nghĩ!).

Trả lời

15

Bạn có thể sử dụng (;|$) để khớp. Hoặc nếu bạn không muốn chụp, (?:;|$)

1

nếu tùy chọn re.MUTILINE không được bật ($ có nghĩa là kết thúc chuỗi)

ID=(?P<group>)[^;]+ 

nếu tùy chọn re.MUTILINE được kích hoạt ($ nghĩa cuối dòng)

ID=(?P<group>)[^;\r\n]+ 

để bạn nắm bắt gì, bằng cách này: những gì là giữa (P < nhóm>) và ';'? ?

+0

Điểm tốt trên đa dòng, chỉ bao giờ sẽ là một dòng cho mã này vì vậy tôi chưa thực sự xem xét nó. Câu hỏi của bạn trong dòng cuối cùng nhầm lẫn tôi cho đến khi tôi nhận ra rằng tôi đã có. +? bên ngoài nhóm chụp, giờ đã được khắc phục và hy vọng điều đó rõ ràng hơn một chút. – mrmagooey

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