tôi cần phải trích xuất chuỗi từ dấu ngoặc lồng nhau như vậy:Extract chuỗi bên trong dấu ngoặc lồng nhau
[ this is [ hello [ who ] [what ] from the other side ] slim shady ]
quả (thứ tự không quan trọng):
This is slim shady
Hello from the other side
Who
What
Lưu ý, các chuỗi có thể có N dấu ngoặc và chúng sẽ luôn hợp lệ, nhưng có thể hoặc không được lồng nhau. Ngoài ra, chuỗi không phải bắt đầu bằng một khung.
Các giải pháp mà tôi đã tìm thấy trực tuyến cho một vấn đề tương tự đề xuất một regex, nhưng tôi không chắc rằng nó sẽ hoạt động trong trường hợp này.
Tôi đã nghĩ đến việc thực hiện điều này tương tự như cách chúng tôi kiểm tra xem một chuỗi có tất cả dấu ngoặc đơn hợp lệ:
Walk qua chuỗi. Nếu chúng ta thấy một [chúng ta đẩy chỉ mục của nó trên ngăn xếp, nếu chúng ta thấy một], chúng ta chuỗi con từ đó đến vị trí hiện tại.
Tuy nhiên, chúng tôi cần phải xóa chuỗi con đó khỏi chuỗi gốc để chúng tôi không nhận được chuỗi đó như một phần của bất kỳ đầu ra nào. Vì vậy, thay vì đẩy chỉ đẩy chỉ mục vào ngăn xếp, tôi đã nghĩ đến việc tạo một LinkedList khi chúng ta đi cùng, và khi chúng ta tìm thấy [chúng ta chèn Node đó vào LinkedList. Điều này sẽ cho phép chúng ta dễ dàng xóa chuỗi con khỏi LinkedList.
Đây có phải là cách tiếp cận tốt hay có giải pháp sạch hơn, được biết đến không?
EDIT:
'[ this is [ hello [ who ] [what ] from the other [side] ] slim shady ][oh my [g[a[w[d]]]]]'
nên trở (thứ tự không quan trọng):
this is slim shady
hello from the other
who
what
side
oh my
g
a
w
d
không gian trắng không quan trọng, đó là tầm thường để loại bỏ sau đó. Điều quan trọng là có thể phân biệt các nội dung khác nhau trong các dấu ngoặc đơn. Hoặc bằng cách tách chúng thành các dòng mới hoặc có danh sách các chuỗi.
Đây là một câu hỏi thoải mái khôn lanh, tôi muốn giải quyết nó sử dụng đệ quy, nhưng điều đó có thể là một chút khó khăn :) –
đi trước và thử them'all .. – Sundeep
các cấu trúc ban đầu với dấu ngoặc là gì? Chỉ là một chuỗi như 'astring =" [đây là [xin chào [người] [cái] từ phía bên kia] râm mỏng] ""? Nếu có, tại sao không đơn giản là 'astring.replace (']', '')', 'astring.replace ('[', '')' và sau đó là 'astring.split()'? –