我需要一些给出以下字符串的正则表达式:
include
只匹配a-z字符中的单词:
应匹配:测试测试
不应该匹配:test3 t3st test:word%5 test!吨[ST
我尝试了([A-Za-z])\w+但是%5字不应该匹配。
答案 0 :(得分:3)
您可以使用
String patt = "(?<!\\S)\\p{Alpha}+(?!\\S)";
请参阅regex demo。
它将匹配用空格或字符串位置的开头/结尾包含的1个或多个字母。替代模式是(?<!\S)[a-zA-Z]+(?!\S)
(与上面的相同)或(?<!\S)\p{L}+(?!\S)
(如果您还想匹配所有Unicode字母)。
<强>详情:
(?<!\\S)
- 如果当前位置左侧有非空白字符,则会导致匹配失败的负面后备\\p{Alpha}+
- 一个或多个ASCII字母(与[a-zA-Z]+
相同,但如果您使用Pattern.UNICODE_CHARACTER_CLASS
修饰符标记,则\p{Alpha}
将能够匹配Unicode字母)< / LI>
(?!\\S)
- 如果当前位置右侧有非空格字符,则会导致匹配失败的否定前瞻。查看Java demo:
String s = "test test3 t3st test: word%5 test! testing t[st";
Pattern pattern = Pattern.compile("(?<!\\S)\\p{Alpha}+(?!\\S)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group(0));
}
输出:test
和testing
。
答案 1 :(得分:1)
试试这个
Pattern tokenPattern = Pattern.compile("[\\p{L}]+");
[\\p{L}]+
这会打印一组字母