我遇到了正则表达式的以下问题:我编写了一个程序,它从一些文本(txt)文件中读取单词并写入另一个文件,每行写一个单词。
一切正常,除非读取的单词中包含特殊字符ľščťžýáíé
。正则表达式删除char并将特殊字符所在的单词拆分。
例如:
输入:
I am Jožo.
输出:
I
am
Jo
o
以下是代码片段:
while( (line = br.readLine())!= null ){
Pattern p = Pattern.compile("[\\w']+");
Matcher m = p.matcher(line);
}
答案 0 :(得分:5)
而不是这个正则表达式:
Pattern.compile("[\\w']+")
使用基于Unicode:
Pattern.compile("[\\p{L}']+")
这是因为默认情况下,Java中的\\w
仅匹配ASCII字符,数字0-9和下划线。
另一个选项是使用修饰符
Pattern.UNICODE_CHARACTER_CLASS
像这样:
Pattern.compile("[\\w']+", Pattern.UNICODE_CHARACTER_CLASS)
答案 1 :(得分:-1)
\\ w仅匹配a-z,A-Z和0-9(英文字母加数字) 如果你想接受除空格之外的任何字符作为单词的一部分,请使用\\ S