Điều này giống như một câu hỏi thực sự đơn giản, nhưng tôi không thể tìm thấy câu trả lời ở bất kỳ đâu.Không thể tìm thấy cú pháp chính xác của regex để khớp với dòng mới hoặc kết thúc của chuỗi
(Ghi chú:. Tôi đang sử dụng Python, nhưng điều này không phải vấn đề)
Nói rằng tôi có chuỗi sau:
s = "foo\nbar\nfood\nfoo"
Tôi chỉ đơn giản là cố gắng tìm một regex mà sẽ phù hợp cả hai trường hợp "foo", nhưng không phải "thực phẩm", dựa trên thực tế là "foo" trong "thực phẩm" không được theo sau bởi một dòng mới hoặc kết thúc của chuỗi.
Đây có lẽ là một cách quá phức tạp để thể hiện câu hỏi của tôi, nhưng nó mang lại một cái gì đó cụ thể để làm việc.
Dưới đây là một số trong những điều tôi đã cố gắng, với kết quả (Lưu ý: kết quả tôi muốn là [foo\n
, foo
]):
foo[\n\Z]
=> ['foo\n'
]
foo(\n\Z)
=> ['\n'
, ''
] < = Điều này có vẻ phù hợp với newline và EOS, nhưng không phải là foo
foo($|\n)
=> ['\n'
, ''
]
(foo)($|\n)
=> [(foo
, '\n'
), (foo
, ''
)] < = Hầu như ở đó, và đây là một kế hoạch sử dụng được B, nhưng tôi muốn tìm ra giải pháp hoàn hảo.
Điều duy nhất tôi phát hiện ra rằng không làm việc là:
foo$|foo\n
=> ['foo\n'
, ` 'foo']
Điều này là tốt cho một ví dụ đơn giản như vậy, nhưng nó rất dễ dàng để xem nó như thế nào có thể trở nên khó sử dụng với một biểu thức lớn hơn nhiều (và có, điều này foo
là một đứng trong biểu thức lớn hơn tôi đang thực sự sử dụng).
Thú vị sang một bên: Các câu hỏi SO gần nhất tôi có thể tìm cho vấn đề của tôi là này một: In regex, match either the end of the string or a specific character
Ở đây, tôi chỉ đơn giản là có thể thay thế \n
cho 'nhân vật cụ thể' của tôi. Bây giờ, câu trả lời được chấp nhận sử dụng regex /(&|\?)list=.*?(&|$)/
. Tôi nhận thấy rằng OP đã sử dụng JavaScript (câu hỏi đã được gắn thẻ với thẻ javascript
), vì vậy có thể trình thông dịch regex JavaScript khác, nhưng khi tôi sử dụng các chuỗi chính xác được đưa ra trong câu hỏi với regex ở trên, tôi nhận được kết quả xấu:
>>> findall("(&|\?)list=.*?(&|$)", "index.php?test=1&list=UL")
[('&', '')]
>>> findall("(&|\?)list=.*?(&|$)", "index.php?list=UL&more=1")
[('?', '&')]
Vì vậy, tôi bị bối rối.
Bạn có biết về [re.MULTILINE] (http://docs.python.org/2/library/re.html) không? –
Có, và tôi biết rằng nó sẽ làm việc cho tôi bằng Python, nhưng tôi muốn tìm một giải pháp độc lập về ngôn ngữ. –