java - 如何使用 Java Regex 查找具有给定字母的单词
问题描述
public class Homework {
public static void main(String[] args) {
String words[] = { "Abendessen", "Affe", "Affen", "aber", "anders", "Attacke", "arrangieren", "Art", "Asien",
"Bund", "Arten", "Biene", "Abend", "baden", "suchen", "A1rten", "Abend-Essen" };
Pattern pattern = Pattern.compile("[aA][a-z[n]+a-z]*");
for (int i = 0; i < words.length; i++) {
Matcher matcher = pattern.matcher(words[i]);
if (matcher.find()) {
System.out.println("OK: " + words[i]);
}
}
}
}
过滤以 a 或 A 开头并在单词中包含 n 的单词。这些单词可能只由字母组成,并且只有以第二个字母开头的小写字母。这些词应该匹配:Abendessen, Affen, anders, arrangieren, Asien, Arten, Abend
我不小心尝试了上面的这个正则表达式,并认为这也是错误的。
解决方案
您当前的模式[aA][a-z[n]+a-z]*
如下:
人物课[aA]
,人物课[a-z[n]+
。然后a-z]*
它会匹配一个a
, -
,z
并]
重复 0+ 次。
这将例如匹配Abendessena-z]
您可能会做的是以 a 或 A 开始匹配并重复 2 次[a-z]
0+ 次,并确保n
中间有 a:
\b[aA][a-z]*n[a-z]*\b
解释
\b
字边界[aA]
匹配一个或一个[a-z]*
匹配 0+ 次 azn
匹配n
[a-z]*
匹配 0+ 次 az\b
字边界
您也可以使用锚点^
并$
断言字符串的开头和结尾,而不是\b
推荐阅读
- cpu - 为什么 CPU 缓存比 RAM 快?
- python - 如何阅读发送到 Selenium Chrome 驱动程序的推送通知?
- javascript - 在 serverinfo 命令 Discord.js v13 中嵌入错误
- ffmpeg - 未找到 Discord.Py ffmpeg
- fortran - 如何在 Fortran 中真正实现矢量化?
- javascript - JavaScript 中的闭包值存储在哪里?
- authentication - nginx-rtmp-module,身份验证,如何?
- iis - IIS URL 重写 - URL 在重写过程中被部分解码
- python - 使用 Pandas Dataframe 对可变时间段的天气数据进行重采样
- crystal-reports - 如何在水晶报表中显示每年动态列的结果