正则表达式不过滤数字
问题描述:
使用这行代码来提取两个字符串“Origin”和“//”之间的所有文本。我试图排除所有的数字,但这不起作用,它抓住了包括数字在内的所有数字。我的正则表达式不正确?正则表达式不过滤数字
Pattern p = Pattern.compile(Pattern.quote("ORIGIN") + "(.*?[^0-9])" + Pattern.quote("//"), Pattern.DOTALL);
答
首先:你没有必要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)否结果(模式不匹配)
例子将是更好的。 – 2014-11-06 14:38:12
你的正则表达式显然不能解释你的解释。你能至少看到为什么? (提示:'[^ 0-9]')没有量词 – fge 2014-11-06 14:41:19
是的,我试过[^ 0-9] +,但也没有工作。我很失落! – 2014-11-06 15:12:51