2012-11-14 48 views
7

Tôi đã xem qua các trang và các trang kết quả của Google nhưng chưa tìm thấy bất kỳ thứ gì có thể giúp tôi.Chuỗi phân tách Java (Regex?) Giữa kết hợp số/chữ cái

Điều tôi đang cố gắng làm là chia một chuỗi như Bananas22Apples496Pears3 và chia nhỏ thành một loại định dạng có thể đọc được. Kể từ String.split() không thể làm điều này, tôi đã tự hỏi nếu có ai có thể chỉ cho tôi một đoạn mã regex có thể thực hiện điều này.

Mở rộng một chút: chuỗi trên sẽ được chia thành (String[] để đơn giản):

{"Bananas:22", "Apples:496", "Pears:3"} 

Trả lời

4

Hãy thử điều này

String s = "Bananas22Apples496Pears3"; 

String[] res = s.replaceAll("(?<=\\p{L})(?=\\d)", ":").split("(?<=\\d)(?=\\p{L})"); 
    for (String t : res) { 
     System.out.println(t); 
    } 

Bước đầu tiên sẽ là để thay thế cho chuỗi rỗng với một ":", khi bên trái là một bức thư với lookbehind assertion(?<=\\p{L}) và bên phải là một con số, với lookahead assertion(?=\\d).

Sau đó chia kết quả, khi ở bên trái là một chữ số và bên phải là một chữ cái.

\\p{L}Unicode property khớp với mọi chữ cái ở mọi ngôn ngữ.

3

Bạn cần phải Replace và sau đó split các string.You không thể làm điều đó với sự chia rẽ một mình

1>Replace All chuỗi với regex sau

(\\w+?)(\\d+) 

và thay thế bằng

$1:$2 

2> Bây giờ Split nó với regex này

(?<=\\d)(?=[a-zA-Z]) 
+0

Tôi không chính xác nóng với Regex, tôi đã cố gắng một Pattern.compile sử dụng mô hình đó, nhưng tôi nhận được một lỗi "dãy thoát không hợp lệ". – Timr

+0

@Timr bạn đã không thoát nó như thế này '" \\ w +? \\ d + "' – Anirudha

+0

@Timr nó chắc chắn sẽ giúp đỡ nếu bạn sẽ đọc các ví dụ mẫu Java. Tôi đặt cược họ dạy bạn thoát, quá ... –

0

Thay \d+ bởi :$0 và sau đó chia ở (?=[a-zA-Z]+:\d+).

+0

'$ 1' phải là' $ 0' – Anirudha

1

này nên làm những gì bạn muốn:

import java.util.regex.*; 

String d = "Bananas22Apples496Pears3" 

Pattern p = Pattern.compile("[A-Za-z]+|[0-9]+"); 

Matcher m = p.matcher(d); 

while (m.find()) { 
     System.out.println(m.group()); 
} 

// Bananas 
// 22 
// Apples 
// 496 
// Pears 
// 3 
0
String myText = "Bananas22Apples496Pears3"; 
System.out.println(myText.replaceAll("([A-Za-z]+)([0-9]+)", "$1:$2,")); 
Các vấn đề liên quan