【问题标题】:Regular expression not filtering out digits正则表达式不过滤掉数字
【发布时间】:2014-11-06 14:37:28
【问题描述】:

我使用这行代码来提取两个字符串“Origin”和“//”之间的所有文本。我试图排除所有数字,但这不起作用,它会抓取包括数字在内的所有内容。我的正则表达式不正确吗?

Pattern p = Pattern.compile(Pattern.quote("ORIGIN") + "(.*?[^0-9])" + Pattern.quote("//"), Pattern.DOTALL);

【问题讨论】:

  • 例子会更好。
  • 您的正则表达式显然不符合您的解释建议;你至少能明白为什么吗? (提示:[^0-9] 上没有量词)
  • 是的,我尝试了 [^0-9]+,但也没有用。我迷路了!

标签: java regex web-scraping


【解决方案1】:

首先:你不需要Pattern.quote()ORIGIN//;更重要的是,您问题中的文字建议Origin,而不是ORIGIN,所以我会改为使用。

试试这个正则表达式:

private static final Pattern PATTERN
    = Pattern.compile("Origin([^0-9/]+)//");

注意:它也不允许在 Origin// 之间使用任何斜线,这可能是也可能不是你想要的;但是由于您的问题中没有示例,因此这是我所能想到的最好的解决方案。

【讨论】:

    【解决方案2】:

    你想要什么不清楚。
    1)如果您只想获取文本(没有任何数字),即使有数字:

    Pattern p = Pattern.compile("ORIGIN(.*)//");
    Matcher m = p.matcher(str);
    if(m.find())
        System.out.println(m.group(1).replaceAll("\\d+", ""));
    

    2) 如果你想得到没有数字的文本:

    Pattern p = Pattern.compile("ORIGIN([^0-9]+)//");
    Matcher m = p.matcher(str);
    if(m.find())
        ystem.out.println(m.group(1));    
    

    3) 别的东西??????

    例如:

    字符串:ORIGINbla54bla//

    1) 字符串:blabla
    2) 无结果(模式不匹配)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 2022-10-04
      • 2012-11-03
      • 2013-08-31
      • 1970-01-01
      相关资源
      最近更新 更多