Regex 如何仅捕获字符串行中的单词

Regex 如何仅捕获字符串行中的单词,regex,Regex,我试图使用正则表达式从字符串行中仅捕获正确的单词(即不需要点、逗号、括号等)。例如,如果输入行为: So she was considering in her own mind (as well as she could), 我想捕捉: So she was considering in .... 有人知道怎么做吗?不幸的是,我不熟悉正则表达式 干杯 这是您需要的正则表达式: \b[a-zA-Z]+\b 解释 \b是一个单词边界,它匹配一个位置,其中一边是字母,另一边不是字母(

我试图使用正则表达式从字符串行中仅捕获正确的单词(即不需要点、逗号、括号等)。例如,如果输入行为:

So she was considering in her own mind (as well as she could),
我想捕捉:

So 
she 
was 
considering 
in
....
有人知道怎么做吗?不幸的是,我不熟悉正则表达式


干杯

这是您需要的正则表达式:

\b[a-zA-Z]+\b

解释

  • \b
    是一个单词边界,它匹配一个位置,其中一边是字母,另一边不是字母(例如空格字符或字符串的开头)
  • 字符类
    [a-zA-Z]
    匹配范围
    a-Z
    a-Z
  • +
    量词表示我们必须匹配前面的一次或多次
  • \b
    边界确保我们的话结束了。这两个边界确保我们有一个完整的单词
在Java中

在评论中,您提到您希望看到一个列表。您可以使用以下选项:

List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("\\b[a-z]+\\b", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    matchList.add(regexMatcher.group());
    } 
List matchList=new ArrayList();
Pattern regex=Pattern.compile(“\\b[a-z]+\\b”,Pattern.CASE不区分大小写| Pattern.UNICODE_大小写);
Matcher regexMatcher=regex.Matcher(subjectString);
while(regexMatcher.find()){
add(regexMatcher.group());
} 

注意,我使模式不区分大小写。

太好了!它确实有效。。。有一个问题,如果我想把所有的单词都列成一个单子怎么办。我的意思是,我确实希望避免使用括号、逗号等。。。但是我想把这些词分开。在上下文中,我使用java的split方法,所以我想打印出组成一行的所有单词。干杯我添加了Java代码,这样您就可以得到一个列表。让我知道它是否对你方有效。:)行分割(/(?:[^a-zA-Z]|\s)+/)不起作用吗?只需反转匹配:“查找但不保留非字母或空格字符的非零数量”。必须确保Java非捕获与Perl相同。@JoeMcMahon嘿,你试图对我的答案进行的大量编辑是怎么回事?做同样的事情总有100种方法。是的,配对和分割是同一枚硬币的两面。nelt22开始询问一份清单,我就是这样回答的。你完全可以自由地以不同的方式展示,如果可行的话,我会投赞成票(请提供演示),因为我总是喜欢看到其他答案。:)谢谢,下次见!:)