[英]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.