Java正则表达式:如何选择以特定字母开头且长度为x个字符的单词?

恩齐奥

这是我写的选择所有从 A 开始的名字的代码:

String longString = "Amal Kamal Jamal Amitha Farook Amani Tom Adele George Ariana";
String pattern = "(?i)(\\s|^)[a][A-Za-z]+(\\s|$)";
Pattern checkRegex = Pattern.compile(pattern);
Matcher regexMatcher = checkRegex.matcher(longString);
while (regexMatcher.find()) {
    System.out.println(regexMatcher.start() + " : " + regexMatcher.group());
}

输出符合预期

0 : Amal 
16 :  Amitha 
30 :  Amani 
40 :  Adele 
53 :  Ariana

现在我想选择长度至少为 5 个字符的名称。所以预期的输出是:Amitha、Adele、Ariana。

当我输入这个时,只返回 Ariana。我不明白为什么。

String pattern = "(?i)(\\s|^)[a][A-Za-z]+(\\s|$){5,}";

输出

53 :  Ariana

如果我在整个表达式周围放一个括号(说这个表达式应该是 5 个字符长)那么输出是什么

String pattern = "(?i)((\\s|^)[a][A-Za-z]+(\\s|$)){5,}";

写这个的正确方法是什么?

维克多·斯特里比尤夫

(\\s|$)当你需要量化时,你就量化了[a-zA-Z]因此,您只能匹配单词后有 5 个或更多空格或 5 个或更多字符串结尾(当然没有意义)的文本。此外,您需要使用{4,}as[a]已经匹配 1 个字母。

使用这个正则表达式来解决这个问题(虽然它不是最好的,请看下面的原因):

(?i)(\s|^)a[a-z]{4,}(\s|$)

细节

  • (?i) - 不区分大小写的修饰符
  • (\s|^) - 空格或字符串的开头
  • a- 一个a一个A字母
  • [a-z]{4,} - 任何 4 个或更多 ASCII 字母
  • (\s|$) - 一个空格或一个字符串的结尾(注意:空格将被消耗,并且连续匹配的单词将不会被正确处理)。

您可以使用"(?i)(?<!\\S)a[a-z]{4,}(?!\\S)"模式来确保在空格或字符串位置的开始/结束之间匹配一个单词。

或者,使用单词边界 - "(?i)\\ba[a-z]{4,}\\b"

请参阅Java 在线演示

String longString = "Amal Kamal Jamal Amitha Farook Amani Tom Adele George Ariana";
String pattern = "(?i)(?<!\\S)a[a-z]{4,}(?!\\S)";
Pattern checkRegex = Pattern.compile(pattern);
Matcher regexMatcher = checkRegex.matcher(longString);
while (regexMatcher.find()) {
    System.out.println(regexMatcher.start() + " : " + regexMatcher.group());
}

结果:

17 : Amitha
31 : Amani
41 : Adele
54 : Ariana

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式,长度为25个字符,以字母开头

来自分类Dev

正则表达式以5开头,不包括特定的前面的数字和6个字符的长度

来自分类Dev

如何选择包含以大写字母开头和正则表达式开头的单词的字符串?

来自分类Dev

正则表达式查找至少包含X个字符且每个字符不超过Y个连续重复的单词

来自分类Dev

正则表达式匹配字符串,长度为3-6个字符,至少一个字母,没有重复的“-”

来自分类Dev

使用正则表达式 JAVA 用 * 替换特定单词后的每个字符

来自分类Dev

正则表达式允许以字母开头且没有特定字符集的字符串

来自分类Dev

Javascript 的正则表达式 - 在获取任何字符后在开头包含特定单词,直到某个字符出现

来自分类Dev

字符串的正则表达式 - 长度为 9,第三个字符的字母和剩余的数字

来自分类Dev

正则表达式:如何删除不是单词的单个字符?

来自分类Dev

如何使用单个正则表达式替换开头和结尾是否为特定字母

来自分类Dev

如何使用正则表达式从长于M个字母的单词中选择前N个字母?

来自分类Dev

如何为字符串匹配编写一个正则表达式,该正则表达式以任何字母开头并以数字结尾,并且在js中介于N个字符之间

来自分类Dev

如何使用正则表达式在特定字符后获取 1 或 2 个字符?

来自分类Dev

R中两个字符之间长度可变的单词的正则表达式

来自分类Dev

正则表达式匹配长度大于 1 的单词的最后一个字符

来自分类Dev

什么是与字母数字6个字符单词匹配的正则表达式,用空格或逗号分隔

来自分类Dev

需要以784开头且长度为15个数字的正则表达式

来自分类Dev

如何在 Python 中为特定类型的字母数字单词创建正则表达式

来自分类Dev

正则表达式匹配后如何选择n个字符

来自分类Dev

[字母数字] [字母数字.__ @] 31个字符的正则表达式建议

来自分类Dev

正则表达式以Java查找以'JD'固定单词长度开头的单词

来自分类Dev

正则表达式:选择并删除在特定标签中包含少于3个字母的单词

来自分类Dev

正则表达式-选择以大写字母开头的连续单词

来自分类Dev

Python(正则表达式:单个字母后替换每个字符)

来自分类Dev

长度为N的字符串包含至少一个字母x的javascript正则表达式

来自分类Dev

10 个字符的字母数字字符串的正则表达式

来自分类Dev

正则表达式正好以两个字母字符开头,后跟任意数字

来自分类Dev

正则表达式递归:匹配两个字符的开头

Related 相关文章

  1. 1

    正则表达式,长度为25个字符,以字母开头

  2. 2

    正则表达式以5开头,不包括特定的前面的数字和6个字符的长度

  3. 3

    如何选择包含以大写字母开头和正则表达式开头的单词的字符串?

  4. 4

    正则表达式查找至少包含X个字符且每个字符不超过Y个连续重复的单词

  5. 5

    正则表达式匹配字符串,长度为3-6个字符,至少一个字母,没有重复的“-”

  6. 6

    使用正则表达式 JAVA 用 * 替换特定单词后的每个字符

  7. 7

    正则表达式允许以字母开头且没有特定字符集的字符串

  8. 8

    Javascript 的正则表达式 - 在获取任何字符后在开头包含特定单词,直到某个字符出现

  9. 9

    字符串的正则表达式 - 长度为 9,第三个字符的字母和剩余的数字

  10. 10

    正则表达式:如何删除不是单词的单个字符?

  11. 11

    如何使用单个正则表达式替换开头和结尾是否为特定字母

  12. 12

    如何使用正则表达式从长于M个字母的单词中选择前N个字母?

  13. 13

    如何为字符串匹配编写一个正则表达式,该正则表达式以任何字母开头并以数字结尾,并且在js中介于N个字符之间

  14. 14

    如何使用正则表达式在特定字符后获取 1 或 2 个字符?

  15. 15

    R中两个字符之间长度可变的单词的正则表达式

  16. 16

    正则表达式匹配长度大于 1 的单词的最后一个字符

  17. 17

    什么是与字母数字6个字符单词匹配的正则表达式,用空格或逗号分隔

  18. 18

    需要以784开头且长度为15个数字的正则表达式

  19. 19

    如何在 Python 中为特定类型的字母数字单词创建正则表达式

  20. 20

    正则表达式匹配后如何选择n个字符

  21. 21

    [字母数字] [字母数字.__ @] 31个字符的正则表达式建议

  22. 22

    正则表达式以Java查找以'JD'固定单词长度开头的单词

  23. 23

    正则表达式:选择并删除在特定标签中包含少于3个字母的单词

  24. 24

    正则表达式-选择以大写字母开头的连续单词

  25. 25

    Python(正则表达式:单个字母后替换每个字符)

  26. 26

    长度为N的字符串包含至少一个字母x的javascript正则表达式

  27. 27

    10 个字符的字母数字字符串的正则表达式

  28. 28

    正则表达式正好以两个字母字符开头,后跟任意数字

  29. 29

    正则表达式递归:匹配两个字符的开头

热门标签

归档