2012-05-12 36 views
19

Tôi có chuỗi này:Regex để phù hợp với sự xuất hiện đầu tiên của một chuỗi

City - Đây là một số văn bản. Đây là một số chi tiết - và tiếp tục ở đây.

Tôi muốn chia chuỗi ở đầu tiên '-' để tìm 'thành phố' (chỉ là một từ mẫu, cũng có thể là các từ khác). Plus để tìm phần còn lại của văn bản sau '-'.

tôi xây dựng biểu thức này:

(^[\D\W\S]*)(-)([\D\W\S]*) 

Nhưng điều này phát hiện sự xuất hiện cuối cùng của '-' thay vì là người đầu tiên.

Làm cách nào để dừng lại ở lần xuất hiện đầu tiên?

+4

Hầu hết các ngôn ngữ có chức năng để phân chia một chuỗi bởi một nhân vật nào đó và thậm chí cho phép bạn giới hạn số chia tách. Bạn nên sử dụng một chức năng như vậy. Nếu bạn cho chúng tôi biết bạn đang sử dụng ngôn ngữ nào, chúng tôi có thể giúp bạn nhiều hơn. –

+0

Nó phụ thuộc vào động cơ regex. Bạn đang dùng gì? –

+3

Thôi nào, tại sao downvote này? Đó là một câu hỏi công bằng, anh ta đã nỗ lực nghiên cứu vào nó, và anh ấy đã cho thấy những gì anh ấy đã thử. Đây là nhiều hơn chúng tôi nhận được từ hầu hết những người mới đến. Vì vậy, từ tôi, user1391459, chào mừng bạn đến với StackOverflow và tham gia ở đó! (Ngoài ra, bạn nên chọn một tên người dùng tốt hơn :)) –

Trả lời

38

Giải pháp đơn giản nhất sẽ được nói rõ cấm gạch ngang là một phần của nhóm đầu tiên:

^([^-]*) - (.*) 

Giải thích:

^  # Start of string 
([^-]*) # Match any number of characters except dashes 
\ - \ # Match a dash (surrounded by spaces) 
(.*)  # Match anything that follows 

Tuy nhiên, điều này sẽ thất bại nếu chuỗi bạn thể chứa dấu gạch ngang trong nhóm đầu tiên (không được bao quanh bởi dấu cách). Nếu đó là trường hợp, sau đó bạn có thể tận dụng quantifiers lười biếng:

^(.*?) - (.*) 

Giải thích:

^  # Start of string 
(.*?) # Match any number of characters, as few as possible 
\ - \ # Match a dash (surrounded by spaces) 
(.*)  # Match anything that follows 
+1

Hoàn hảo! Cảm ơn cũng vì phản ứng rất nhanh. Bởi vì văn bản cũng có dòng mới và bởi vì có một số ở cuối mà nên được bỏ ra, đây là những gì làm việc:^(. *?) - ([\ D \ W \ S \ n] *) \ d {10 } – Gijs

+1

Tuyệt vời, rất vui khi được nghe. Nhưng bạn nên sử dụng '[\ S \ s] *' thay vì '[\ D \ W \ S \ n] *'. –

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