我是Java和正则表达式的新手
我想检测一下这样的模式 部分:
我有一个代码段
String line = "Section 12: sadfdggfgfgf";
Pattern ptn = Pattern.compile("Section [0-9+]:");
Matcher mtch = ptn.matcher(line);
当ptn =“Section [0-9 +]时: mtch是假的
我能够检测到模式(mtch表示为TRUE) ptn =“Section [0-9 +]
字符串中的空格是否有我遗漏的东西?
我必须假设它们可能是或可能不是Section和<Number>
答案 0 :(得分:3)
将+
放在字符类之外,使其匹配一个或多个数字。 [0-9+]
只匹配给定列表中的单个字符(数字来自范围0-9
或+
)
Pattern ptn = Pattern.compile("Section [0-9]+:");
在运行此"Section [0-9+]:"
正则表达式时,它会返回false,因为没有字符串Section
后跟一个数字或文字+
后跟{{1}在原始字符串中(注意:您的原始字符串包含两个数字后跟冒号:
)。
但是Section 12: sadfdggfgfgf
返回true,因为有一个字符串"Section [0-9+]"
后跟一个数字。
答案 1 :(得分:1)
您需要在角色类之后放置quantifier。字符类定义一组字符,其中任何一个字符都可以出现,以便匹配成功。目前,您正在将0
与9
,+
的所有字符完全匹配“一次”。
匹配为带有冒号的模式返回 false 的原因是因为正则表达式引擎尝试在冒号之前有两个数字的单个数字后匹配冒号。它为没有冒号的模式返回 true 的原因是因为正则表达式引擎能够匹配“Section”后面的单个数字
正确的语法是:
Section [0-9]+:
这匹配“Section”后跟一个空格字符,然后匹配0
到9
的任何字符“一次或多次”和冒号。
答案 2 :(得分:0)
如果要在Section和数字之间接受任意数量的字符串,请尝试使用此正则表达式:
Pattern.compile("Section[\\s]*[\\d]+");
至少有一个空格,请使用:
Pattern.compile("Section[\\s]+[\\d]+");
在java正则表达式中,\ s匹配空格,\ d匹配数字。但是,由于反斜杠启动了转义序列,因此必须转义反斜杠本身,这就是为什么最终会出现双反斜杠的原因。
您可以在此处阅读更多内容和Java正则表达式以及Pattern类:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
答案 3 :(得分:0)
Section\s*[0-9]+:
您可以使用它来确保此匹配与space
和section
之间number
无关。