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

Dig*_*gao 5 java regex qregularexpression

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

"test test3 t3st test: word%5 test! testing t[st"
Run Code Online (Sandbox Code Playgroud)

将只匹配az字符中的单词:

应该匹配:测试测试

不应该匹配:test3 t3st测试:单词%5测试!吨[ST

我试过([A-Za-z])\ w +但是单词%5不应该匹配.

Wik*_*żew 4

您可以使用

String patt = "(?<!\\S)\\p{Alpha}+(?!\\S)";
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

它将匹配 1 个或多个用空格或字符串位置的开头/结尾括起来的字母。替代模式是(?<!\S)[a-zA-Z]+(?!\S)(与上面的相同)或(?<!\S)\p{L}+(?!\S)(如果您还想匹配所有 Unicode 字母)。

细节

  • (?<!\\S)- 如果当前位置左侧紧邻非空白字符,则会导致匹配失败的负向后查找
  • \\p{Alpha}+- 1 个或多个 ASCII 字母(与 相同[a-zA-Z]+,但如果使用Pattern.UNICODE_CHARACTER_CLASS修饰符标志,\p{Alpha}将能够匹配 Unicode 字母)
  • (?!\\S)- 如果当前位置右侧紧邻非空白字符,则会导致匹配失败的负前瞻。

查看Java 演示

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)); 
} 
Run Code Online (Sandbox Code Playgroud)

输出:testtesting.