我正在尝试查找字符串中是否存在模式。
我想检查的模式是:
以空格或“#”开头的字符串,
然后使用特定字符串“value1”,后跟空格或制表符,
然后是“value2”,再次是空格或制表符,
以“value3”结尾。
这里有一个要检查的示例字符串:
String str = "# value1 values2 value3";
我尝试了以下正则表达式,但它不起作用:
str.matches("^\\s+#\\s+value1\\s+value2\\s+value3");
以上模式总是返回false
。请帮助正则表达。
任何帮助都将非常感激。
答案 0 :(得分:4)
试试这个: -
str.matches("^[ #]value1\\s+value2\\s+value3$");
[ #]
- 匹配空格或#
\\s+
- 匹配1个或多个空格。因此,它会匹配空格或制表符
注意: - 您的字符串中有values2
而不是value2
。
此外,您发布的示例字符串在开始时同时包含space
和#
。但是你说字符串以space
或#
开头。因此,它会匹配您的字符串,如果您在第一个#
之后删除该空格,或者在您的空格之前删除#
,这取决于您所写的内容。
如果您希望在字符串的开头匹配space
和#
,就像您发布的当前String
一样。你需要使用这个正则表达式: -
str.matches("^[ #]\\svalue1\\s+value2\\s+value3$");
答案 1 :(得分:1)
好吧,我现在可以告诉你,正则表达式因输入而失败,因为它需要#
之前的空格
试
str.matches("^#?\\s+value1\\s+value2\\s+value3$");
正则表达式应该与"# value1 value2 value3"
或" value1 value2 value3"
匹配可变数量的空格
答案 2 :(得分:0)
试试这个正则表达式(\s+|\s?#\s?).*value1.*(\s+|\t).*value2.*(\s+|\t).*value3.*
即使你在任何地方都有空格,它也能正常工作。