【发布时间】:2020-09-27 13:23:16
【问题描述】:
如何编写一个忽略任何不以字母开头的标记的正则表达式?它应该在java中使用。
示例:it 's super cool --> 正则表达式应匹配:[it, super, cool] 并忽略 ['s]。
【问题讨论】:
如何编写一个忽略任何不以字母开头的标记的正则表达式?它应该在java中使用。
示例:it 's super cool --> 正则表达式应匹配:[it, super, cool] 并忽略 ['s]。
【问题讨论】:
替代正则表达式:
"(?:^|\\s)([A-Za-z]+)"
上下文中的正则表达式:
public static void main(String[] args) {
String input = "it 's super cool";
Matcher matcher = Pattern.compile("(?:^|\\s)([A-Za-z]+)").matcher(input);
while (matcher.find()) {
String result = matcher.group(1);
System.out.println(result);
}
}
输出:
it
super
cool
注意:要匹配任何语言(例如印地语、德语、中文、英语等)的字母字符、字母,请改用以下正则表达式:
"(?:^|\\s)(\\p{L}+)"
更多关于类 Pattern 以及 Unicode 脚本、块、类别和二进制属性的类,可以找到 here。
【讨论】:
[A-Za-z] 仅适用于英文字母。为了涵盖所有类型的字母(例如印地语、德语、中文等),您应该在 Java 中使用\\p{L}。
您可以使用(?<!\\p{Punct})(\\p{L}+),这表示字母前面没有标点符号。请注意,(?<! 用于指定 negative look behind。查看Pattern 的文档以了解更多信息。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String str = "it 's super cool";
Pattern pattern = Pattern.compile("(?<!\\p{Punct})(\\p{L}+)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
}
输出:
it
super
cool
【讨论】: