正则表达式不过滤数字

问题描述:

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

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

例子将是更好的。 – 2014-11-06 14:38:12

+0

你的正则表达式显然不能解释你的解释。你能至少看到为什么? (提示:'[^ 0-9]')没有量词 – fge 2014-11-06 14:41:19

+0

是的,我试过[^ 0-9] +,但也没有工作。我很失落! – 2014-11-06 15:12:51

首先:你没有必要Pattern.quote()ORIGIN//;更重要的是,你的问题中的文字暗示Origin,而不是ORIGIN,所以我会用它来代替。

试试这个正则表达式:

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

注:它不允许Origin//之间的斜线为好,这可能会或可能不会,是你想要的东西;但由于你的问题中没有例子,所以这是一个很好的解决方案。

你想要的东西不清楚。
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 )别的东西???????

E.g:

字符串:ORIGINbla54bla//

1)字符串:布拉布拉
2)否结果(模式不匹配)