gpt4 book ai didi

java - 使用正则表达式从句子中查找带有 [a-zA-Z] 的单词

转载 作者:搜寻专家 更新时间:2023-11-01 01:46:25 25 4
gpt4 key购买 nike

我正在尝试使用正则表达式获取句子中的所有单词,但仅使用 [a-zA-Z] 的单词。所以对于“我是男孩”,我想要 {"I", "am", "a", "boy"}但是对于“I a1m a b*y”,我想要{“I”、“a”},因为“a1m”和“b*y”包含 [a-zA-Z] 以外的字符。

所以为了我得到的话,我正在尝试检查

  1. 如果在字符串的开头,那么我只检查单词后是否有空格
  2. 否则单词前后有一个空格
  3. 如果是最后一个单词,则检查单词前是否有空格。

所以我最终在 Java 中得到了这样的东西:

Pattern p = Pattern.compile("^[a-zA-Z]+ |^[a-zA-Z]+$| [a-zA-Z]+$| [a-zA-Z]+");
Matcher m = p.matcher("i am good");
while(m.find()) System.out.println(m.group());

但是,我只得到“i”和“good”。因为当我得到“i”时,“i”后面有一个空格。所以剩下的字符串是“很好”由于“am”不在字符串的开头,单词前也没有空格,因此不会返回。

你们能对此提供任何反馈吗?有没有办法只查看下一个字符而不返回空格?

最佳答案

假设您的正则表达式引擎支持前瞻/后视断言,您可以使用如下内容:

(^|(?<= )[a-zA-Z]+($|(?= ))

下面是对每个组件的作用的简要描述:

(^|(?<= )) :这表示“如果一个词从这里开始,我们就会感兴趣”。具体来说,
^ : 匹配行首,或者
(?<= ) : 匹配前面有空格的任何点,而不实际消耗空格本身。这称为积极的回顾断言。

[a-zA-Z]+ : 这应该是显而易见的,但它匹配任何连续的 ASCII 字母字符。

($|(?= )) :这说“如果这个词在这里完成,我们就完成了”。具体来说,
$ : 匹配行尾,或者
(?= ) : 匹配任何后跟空格的点,而不实际消耗空格本身。这称为积极的先行断言。


请注意,此特定正则表达式不会将后跟标点符号的单词视为一个单词。这实际上可能不是您想要的,但您描述了检查空格,这就是正则表达式的作用。如果你想支持后面跟着简单标点符号的单词,你可以将最后一个原子修改为

($|(?=[ .,!?]))

如果单词后跟空格、句点、逗号、感叹号或问号,它将匹配该单词。如果你愿意,你也可以更详细。

关于java - 使用正则表达式从句子中查找带有 [a-zA-Z] 的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8875750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com