2013-03-06 22 views
12

Tôi đang sử dụng regex này:Chuỗi chia, lời nói bao gồm cả ký tự có dấu

x.split("[^a-zA-Z0-9']+"); 

này trả về một mảng các chuỗi với chữ cái và/hoặc số.

Nếu tôi sử dụng này:

String name = "CEN01_Automated_TestCase.java"; 
String[] names = name.Split.split("[^a-zA-Z0-9']+"); 

tôi nhận:

CEN01 
Automated 
TestCase 
Java 

Nhưng nếu tôi sử dụng này:

String name = "CEN01_Automação_Caso_Teste.java"; 
String[] names = name.Split.split("[^a-zA-Z0-9']+"); 

tôi nhận:

CEN01 
Automa 
o 
Caso 
Teste 
Java 

Làm cách nào để sửa đổi regex này để bao gồm các ký tự có dấu trọng âm? (á, ã, õ, vv ...)

+1

Nếu Java hỗ trợ các thuộc tính unicode '[^ \ p {L}]' sẽ khá mạnh mẽ. Không biết nếu nó mặc dù ... – Wrikken

+1

@ Wrikken: Nó có. Java 7 thậm chí còn hỗ trợ '\ w' và' \ b' theo cách hợp lý Unicode. –

+0

Rất tốt, tôi chỉ lười nhác để tìm kiếm nó, nhưng được ghi nhận hợp lệ;) – Wrikken

Trả lời

9

Từ http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

Categories mà cư xử như java.lang.Character boolean ismethodname phương pháp (trừ những người phản đối) có sẵn thông qua cùng một cú pháp \p{prop} hợp tài sản quy định có tên javamethodname.

Kể từ Character lớp chứa isAlphabetic phương pháp mà bạn có thể sử dụng

name.split("[^\\p{IsAlphabetic}0-9']+"); 

Bạn cũng có thể sử dụng

name.split("(?U)[^\\p{Alpha}0-9']+"); 

nhưng bạn sẽ cần phải sử dụng UNICODE_CHARACTER_CLASS cờ mà có thể được sử dụng bằng cách thêm (?U) trong regex .

+1

Người đàn ông, điều này thật đẹp * - *. Nó cũng giúp tôi. Cảm ơn! – Jvam

+0

Vui vì bạn thích nó. Bạn có thể tìm thấy nhiều thông tin hữu ích trong [Tài liệu mẫu] (http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html) :) – Pshemo

2

Tôi sẽ xem Java Documentation on Regular Expressions. Có một phần unicode mà tôi tin là những gì bạn có thể đang tìm kiếm.

EDIT: Ví dụ

Một cách khác là khớp với mã ký tự bạn đang tìm kiếm. Ví dụ

\uFFFF where FFFF is the hexadecimal number of the character you are trying to match. 

Ví dụ: \u00E0 matches à

Nhận ra rằng xuyệc ngược sẽ cần phải được thoát trong Java nếu bạn đang sử dụng nó như là một chuỗi chữ.

Đọc thêm về nó here.

+0

Có thể bạn đã đúng, nhưng phiếu bầu của tôi là dành cho người gửi một ví dụ làm việc tại đây. –

+1

Xem câu trả lời được cập nhật. –

1

Tại sao không chia thành các ký tự phân cách?

String[] names = name.split("[_.]"); 
+0

Cảm ơn! Nó đã giúp tôi đến với một giải pháp! – Jvam

0

Thay vì danh sách đen tất cả các ký tự mà bạn không muốn, bạn có thể luôn luôn whitlist các ký tự bạn muốn thích:

^[^<>%$]*$ 

Khái niệm [^ (nhiều nhân vật ở đây)] chỉ phù hợp với bất kỳ ký tự đó không phải là liệt kê.

Nhưng đó là ý kiến ​​cá nhân.

2

Bạn có thể sử dụng này:

String[] names = name.split("[^a-zA-Z0-9'\\p{L}]+"); 

System.out.println(Arrays.toString(names)); Will đầu ra:

[CEN01, Automação, Caso, Teste, java]

Xem this để biết thêm thông tin.

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