【问题标题】:regex match exclamation points java正则表达式匹配感叹号java
【发布时间】:2016-03-21 12:47:54
【问题描述】:

我对正则表达式非常陌生,我正在为一个对我的项目真正有帮助的小项目而苦苦挣扎。我想知道如何计算感叹号的(连续)序列组。例如,让我们考虑以下字符串

String s = "OMG!!!, i love Computers !!!! and this !!! is really good!" 

这里的计数应该返回 3。我尝试了以下方法,但这与我想要的完全不同 public static int exclamation(String list) throws Exception{

String[] words = (list.split("\\s+"));
  Pattern pattern = Pattern.compile("\\*?(!!)*\\b");
int count = 0;
for(String s:words)
{       
    Matcher matcher = pattern.matcher(s);       
    if(pattern.matcher(s) != null)
    {
        System.out.println(s);

    }
}

return count;

}

【问题讨论】:

  • 使用反向引用。 (!)\1+
  • 你的预期输出是什么?
  • @AvinashRaj 那里的打印功能旨在通过尝试打印来查看我是否真的匹配正确的东西,但它所做的只是打印简单的单词(我正在一个巨大的数据集),不确定它是否忽略标点符号而只打印之前的单词,这显然是完全疯狂的
  • @Tushar 似乎有正确的答案,但我无法打印那些感叹号来查看我是否正确匹配它们

标签: java regex


【解决方案1】:

您的正则表达式不会打印任何内容!标记是因为\b。您的正则表达式希望在! 旁边出现一个单词字符,但实际上! 后面没有单词字符,而是一个非单词字符空间。

Pattern pattern = Pattern.compile("\\*?(!{2,})");

Pattern pattern = Pattern.compile("!{2,}");

DEMO

【讨论】:

  • 它似乎在 JAVA 中无效 :(,我正在尝试修复它
  • 这是正确的正则表达式。但我仍然无法计算字符串中有多少,我更改了print 并在每场比赛后增加了计数器,但它给了我如此多的数字,甚至不是正确的
  • 你要检查多少!存在于字符串上?检查这个答案stackoverflow.com/a/25707792/3297613
  • 是的,它单独计算每一个。例如对于上面的字符串,函数返回 11
  • 我修好了谢谢
猜你喜欢
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 2018-06-04
  • 2011-11-02
  • 2014-01-25
  • 2018-04-06
  • 2011-03-30
  • 2011-05-26
相关资源
最近更新 更多