我需要将文本分割并只获取单词、数字和连字符组成的单词。我还需要获取拉丁文单词,因此我使用了\p{L}
,它可以给我é、ú、ü、ã等字符。以下是示例:
String myText = "Some latin text with symbols, ? 987 (A la pointe sud-est de l'île se dresse la cathédrale Notre-Dame qui fut lors de son achèvement en 1330 l'une des plus grandes cathédrales d'occident) : ! @ # $ % ^& * ( ) + - _ #$% " ' : ; > < / \ | , here some is wrong… * + () e -"
Pattern pattern = Pattern.compile("[^\\p{L}+(\\-\\p{L}+)*\\d]+");
String words[] = pattern.split( myText );
这个正则表达式有什么问题?为什么它会匹配像 "("
, "+"
, "-"
, "*"
和 "|"
这样的符号?
一些结果如下:
dresse // OK
sud-est // OK
occident) // WRONG
987 // OK
() // WRONG
(a // WRONG
* // WRONG
- // WRONG
+ // WRONG
( // WRONG
| // WRONG
正则表达式的解释如下:
[^\p{L}+(\-\p{L}+)*\d]+
* Word separator will be:
* [^ ... ] No sequence in:
* \p{L}+ Any latin letter
* (\-\p{L}+)* Optionally hyphenated
* \d or numbers
* [ ... ]+ once or more.
[]
是字符类,只匹配单个字符。 - nhahtdh