我需要一些正则表达式来处理以下字符串:
"test test3 t3st test: word%5 test! testing t[st"
只匹配a-z字符中的单词:
应匹配:test testing
不应匹配:test3 t3st test: word%5 test! t[st
我尝试过([A-Za-z])\w+,但是word%5不应该匹配。
我需要一些正则表达式来处理以下字符串:
"test test3 t3st test: word%5 test! testing t[st"
只匹配a-z字符中的单词:
应匹配:test testing
不应匹配:test3 t3st test: word%5 test! t[st
我尝试过([A-Za-z])\w+,但是word%5不应该匹配。
您可以使用
String patt = "(?<!\\S)\\p{Alpha}+(?!\\S)";
它将匹配由空白字符或字符串的开头/结尾包围的一个或多个字母。另一种模式是(?<!\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)
- 否定前瞻,在当前位置右边紧邻一个非空格字符,匹配失败。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
。["test3 t3st test: word%5 test!", "t[st]"]
还是 6个项目 ["test3", "t3st", "test:", "word%5", "test!", "t[st"]
? - Wiktor Stribiżew"(?:\\S*[^\\s\\p{Alpha}])+\\S*"
。它只匹配任何非空白字符块,并带有一个既不是空格也不是字母的强制字符。 - Wiktor Stribiżew试试这个
Pattern tokenPattern = Pattern.compile("[\\p{L}]+");
[\\p{L}]+
这将打印字母组
(?<!\S)[a-z]+(?!\S)
用于查找仅包含a-z的单词。(?<!\S)(?:[a-z]*[^a-z\s])+[a-z]*(?!\S)
用于查找其他类型的单词。(?<!\S)(?:([a-z]+)|((?:[a-z]*[^a-z\s])+[a-z]*))(?!\S)
可以同时查找两种类型的单词(组1和组2表示哪种类型)。 - user557597