簡體   English   中英

在Java正則表達式中處理Unicode符號

[英]Handling unicode symbols in Java regex

我的任務是從帶有數字和一些文本的字符串中解析整數值。 數字可以使用不同的語言環境設置格式:

15 000 km
15,000 km
15.000 km

我有一個解決方案:

(\d+[[\s\.,]?\d+]*)

適用於以上示例。 但是作為一種極端情況,有一個特殊的輸入機密代碼160而不是常規空格(代碼32):

15 000 km

如何使用Java中的正則表達式實現解決此問題?

撥弄它: http : //java-regex-tester.appspot.com/regex/5d8dd002-fe68-40c3-bf82-42e8574a2f5c

理想情況下,我想要一個通用的解決方案,該解決方案可以處理任何不可打印的字符。

您可以使用Pattern.UNICODE_CHARACTER_CLASS標志來使您的\\s Unicode感知:

String pattern = "(?U)\\d+[\\s.,]?\\d+";
                  ^^^

參見Java演示

String value1 = "15 000 km\n15,000 km\n15.000 km\n15 000 km";
String pattern1 = "(?U)\\d+[\\s.,]?\\d+";
Pattern ptrn = Pattern.compile(pattern1);
Matcher matcher = ptrn.matcher(value1);
while (matcher.find())
    System.out.println(matcher.group(0));

輸出:

15 000
15,000
15.000
15 000

為什么不包括其他分隔符( )?

(\\d+(?:[\\s.,\ ]?\\d+)*)

UNICODE_CHARACTER_CLASS標志進行編譯將使\\s匹配,但是有警告說它可能會變慢。 您必須進行測試以查看它對您的輸入是否重要。

您可以使用這個簡單的正則表達式,它匹配任意兩個用0或多個非數字分隔的數字,即\\D

\d+\D*\d+

在Java中:

String regex = "\\d+\\D*\\d+";

\\D將匹配任何非數字,包括任何Unicode字符。

您更新的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM