【问题标题】:Check if a string contains terms with numbers in them检查字符串是否包含带有数字的术语
【发布时间】:2018-04-05 11:28:29
【问题描述】:

据我所知,没有任何功能可以识别其中包含数字的术语。我有一个语料库,里面有一些句子:

Alice2B Visum 7/2 Dann 394–3973-3 ging sie nach Hollywood dort als 25.1 Drehbuchautorin arbeiten Kurz 2006 nach ihrer 329–49 Ankunft lernte sie den Filmregisseur 02/ayn Cecil

我只需要保留单词并删除所有数字或其中带有数字的术语。对于这个例子,输出应该是这样的:

Visum Dann ging sie nach Hollywood dort als Drehbuchautorin arbeiten Kurz nach ihrer Ankunft lernte sie den Filmregisseur Cecil

我正在寻找适用于 Java 的东西。感谢您提供有关此主题的任何信息。

【问题讨论】:

  • 如果网址中有数字应该怎么办..?应该删除吗?
  • 没有。应该保留
  • 如果 URL 包含非编码空格并且术语中是否包含数字?当 URL 包含空格并且您不想删除这些数字时,很难区分
  • 如果不考虑url,有什么解决办法吗?

标签: java regex string text split


【解决方案1】:

您可以使用此正则表达式查找包含数字的术语

\S*\d+\S*

然后删除它们(简单你可以使用String.replaceAll(regex))。如果你想单独处理 url,你可能需要找到另一种方法来检测它们

注意:验证正则表达式here

【讨论】:

    【解决方案2】:

    将其拆分为子字符串(String.split()),然后遍历子字符串以查看它们是否包含数字(String.matches(regex))

    【讨论】:

    【解决方案3】:

    试试这个:

    final List<String> list = Arrays.asList(str.split(" +"));
    list.replaceAll(s -> s.matches(".*\\d+.*") ? "" : s);
    final String result = StringUtils.join(list, ' ').replaceAll(" +", " ");
    

    【讨论】:

    • 在单个空间上拆分可能并不总是有效。语料库数据可以包含不同数量的空格作为术语分隔符
    • 您已经在使用代表{1,}+ 那么为什么不用* 而不是{0,}
    • 糟糕,不知道那个。已编辑
    • 但这应该是一个单一的解决方案。拆分所有条款并再次将它们合并在一起是一种过度杀戮
    【解决方案4】:

    我需要这样的东西。也许它可以帮助其他人。谢谢@Shafin Mahmud 和@Björn Schönrock。

    final String inputText = "Alice2B Visum 7/2 Dann 394–3973-3 ging sie nach Hollywood dort als 25.1 Drehbuchautorin arbeiten Kurz 2006 nach ihrer 329–49 Ankunft lernte sie den Filmregisseur 02/ayn Cecil";
    
    for (String t : inputText.split(" +")) {
        if (t.split("\\S*\\d+\\S*").length>0)
           System.out.println(t);
    }
    

    或类似的东西:

    final String inputText = "Alice2B Visum 7/2 Dann 394–3973-3 ging sie nach Hollywood dort als 25.1 Drehbuchautorin arbeiten Kurz 2006 nach ihrer 329–49 Ankunft lernte sie den Filmregisseur 02/ayn Cecil";
    
    Pattern p = Pattern.compile( "[0-9]" );
    for (String t : inputText.split(" +")) {
        if (!p.matcher(t).find())
           System.out.println(t);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-20
      • 2017-08-27
      • 1970-01-01
      • 2015-02-07
      • 2010-12-19
      • 1970-01-01
      • 2022-06-30
      相关资源
      最近更新 更多