正则表达式只捕获没有数字或符号的单词

时间:2017-07-21 13:58:29

标签: java regex qregularexpression

我需要一些给出以下字符串的正则表达式:

include

只匹配a-z字符中的单词:

应匹配:测试测试

不应该匹配:test3 t3st test:word%5 test!吨[ST

我尝试了([A-Za-z])\w+但是%5字不应该匹配。

2 个答案:

答案 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)); 
} 

输出:testtesting

答案 1 :(得分:1)

试试这个

Pattern tokenPattern = Pattern.compile("[\\p{L}]+");

[\\p{L}]+这会打印一组字母