正则表达式仅适用于字母字符-Java - java

抱歉,我是Regex的新手,但是到目前为止,我尝试使用的任何regex似乎都无法实现以下目标。

我们对“单词”感兴趣(即,该单词是完全字母的,仅包含大写,小写或混合大小写的字母。所有其他内容都将被忽略)

我尝试使用的示例字符串如下:

要找到黄金票,您必须购买一条巧克力:)查理的格兰尼和格兰纳德希望他能得到一张票,但他只有足够的钱来购买1条巧克力。我打印了5张票,但我的Oompa-Loompa工人赚了超过1000000条:)

因此,输出中不应包含诸如查理的,Oompa-Loompa和笑脸之类的词。只是全字母的单词。

我尝试使用其他问题中的一些示例,例如这个here尝试使用正则表达式,例如^ [a-zA-Z] +('[a-zA-Z] +)?$,但不幸的是,我如前所述,我是Regex的新手,所以我不太确定自己在做什么。任何帮助,将不胜感激。

参考方案

描述

此正则表达式将执行以下操作:

假设单词完全由字母A-Z,大写和小写组成
查找所有单词
忽略所有包含非字母字符或符号的字符串
假设一些标点符号如句号或逗号将被忽略,但前面的单词应被捕获。

正则表达式

(?<=\s|^)[a-zA-Z]*(?=[.,;:]?\s|$)

说明

NODE                     EXPLANATION
----------------------------------------------------------------------
  (?<=                     look behind to see if there is:
----------------------------------------------------------------------
    \s                       whitespace (\n, \r, \t, \f, and " ")
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
   ^                         start of the string
----------------------------------------------------------------------
  )                        end of look-behind
----------------------------------------------------------------------
  [a-zA-Z]*                any character of: 'a' to 'z', 'A' to 'Z'
                           (0 or more times (matching the most amount
                           possible))
----------------------------------------------------------------------
  (?=                      look ahead to see if there is:
----------------------------------------------------------------------
    [.,;:]?                  any character of: '.', ',', ';', ':'
                             (optional (matching the most amount
                             possible))
----------------------------------------------------------------------
    \s                       whitespace (\n, \r, \t, \f, and " ")
----------------------------------------------------------------------
   |                        OR
----------------------------------------------------------------------
    $                        before an optional \n, and the end of
                             the string
----------------------------------------------------------------------
  )                        end of look-ahead
----------------------------------------------------------------------

例子

在线正则表达式演示

http://fiddle.re/65eqna

示例Java代码

import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Module1{
  public static void main(String[] asd){
  String sourcestring = "source string to match with pattern";
  Pattern re = Pattern.compile("(?<=\\s|^)[a-zA-Z]*(?=[.,;:]?\\s|$)");
  Matcher m = re.matcher(sourcestring);
  int mIdx = 0;
    while (m.find()){
      for( int groupIdx = 0; groupIdx < m.groupCount()+1; groupIdx++ ){
        System.out.println( "[" + mIdx + "][" + groupIdx + "] = " + m.group(groupIdx));
      }
      mIdx++;
    }
  }
}

样品采集

$matches Array:
(
    [0] => Array
        (
            [0] => To
            [1] => find
            [2] => the
            [3] => golden
            [4] => ticket
            [5] => you
            [6] => have
            [7] => to
            [8] => buy
            [9] => a
            [10] => bar
            [11] => of
            [12] => chocolate
            [13] => Granny
            [14] => and
            [15] => Grandad
            [16] => are
            [17] => hoping
            [18] => he
            [19] => gets
            [20] => a
            [21] => ticket
            [22] => but
            [23] => he
            [24] => only
            [25] => has
            [26] => enough
            [27] => money
            [28] => to
            [29] => buy
            [30] => bar
            [31] => I
            [32] => printed
            [33] => tickets
            [34] => but
            [35] => my
            [36] => workers
            [37] => made
            [38] => more
            [39] => than
            [40] => bars
        )

)

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

JAVA:如何检查对象数组中的所有对象是否都是子类的对象? - java

我有一个对象数组。现在,我要检查所有这些对象是否都是MyObject的实例。有没有比这更好的选择:boolean check = true; for (Object o : justAList){ if (!(o instanceof MyObject)){ check = false; break; } } java大神给出的解决方案 如果您不喜欢循环,则…

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…