【问题标题】:Java Regex: check if a sentence contains only alphabet and numbersJava Regex:检查句子是否仅包含字母和数字
【发布时间】:2014-09-21 06:25:00
【问题描述】:

我的以下程序打印出我不理解的奇怪结果,我想这是由于我对 Java Regex 缺乏深入的了解。所以我希望先按句点拆分testStr,然后检查每个句子是否包含字母或数字。但令人惊讶的是,我得到了以下输出,这与我的愿望相反:

blah blah1 is not a character!
 blah blah2 is not a character!
 blah blah3 is not a character!
 ??** is not a character!     // only this output is expected

我的代码如下:

String testStr = "blah blah1. blah blah2. blah blah3. ??**...";
String[] myStrArray = testStr.split("[.]");

System.out.println("length of myStrArray is: " + myStrArray.length);

for (String str : myStrArray) {
    if (!Pattern.matches("\\w+", str)) {
        System.out.println(str + " is not a character!");
        continue;
    }

    System.out.println("got a meaningful sentence " + str.trim());

}

【问题讨论】:

  • 你的预期输出是什么?
  • 我希望得到除 ??** 之外的所有句子的“得到一个有意义的句子”
  • blah blah1 is not a character! 不仅包含字母,还包含空格和!

标签: java regex match


【解决方案1】:

您的程序使用点作为分隔符拆分字符串,因此您得到:

blah blah1 
blah blah2 
blah blah3 
??**...

然后你尝试使用正则表达式\w+匹配每一行。请注意,match() 的调用等同于find() 的调用,但正则表达式包含^$,即认为您的正则表达式是^\w+$

我认为现在很明显,您的任何一个字符串都不匹配此模式,因为前 3 个字符串包含空格,最后一个既不包含字母字符也不包含数字。

【讨论】:

    【解决方案2】:

    将您的正则表达式更改为:^[a-zA-Z0-9\s]+$ 它将根据需要仅允许字符、数字和空格。请注意,“魔术”的一部分是使用 ^$ 强制完全匹配(从头到尾)。

    此外,我使用a-zA-Z0-9 而不是\w 的原因是\w 包含不符合要求的_

    【讨论】:

      【解决方案3】:

      您可以使用字符集。将您正在使用的正则表达式 ("\\w+") 更改为:

      "[\\s&&[^\\W_]]"
      

      这将允许匹配字母数字 ([^\W_] =>a-zA-Z0-9) 和空格 (\s),而不仅仅是单词字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-02
        • 1970-01-01
        • 2021-10-01
        • 2014-07-16
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多