正则表达式-获取两个%字符之间的内容,但不包含空格

时间:2018-10-11 11:31:09

标签: java regex

我正在尝试在两个%字符之间获取内容而不包含空格。

这就是我到目前为止得到的:(?<=\%)(.*?)(?=\%)

现在我想我需要在某个地方使用\S。我仍然不知道如何使用它。 总是有两种情况:

  1. 我仍然得到了所有这些,即使是那些带有空格字符的人
  2. 我找不到任何匹配项

一个字符串看起来像这样:

  

占位符称为%Test%!现在,您可以将其与实际占位符一起使用。但是,如果我使用更多的%Test2%占位符,它将不再起作用:/。 %Test3%很烂的原因!

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,那么%(\w+)%就会为您解决

    String str = "The placeholder is called %Test%! Now you can use it with real placeholders. But if I use more %Test2% placeholders, it won't work anymore :/. %Test3% sucks cause of that!";
    String regex = "%(\\w+)%";//or %([^\s]+)% to fetch more special characters
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        System.out.println(matcher.group(1));
    }

输出:

Test
Test2
Test3

答案 1 :(得分:0)

您可以使用

(?<=%)[^%\s]+(?=%)

请参见regex demo。或者,如果您更喜欢捕获:

%([^%\s]+)%

请参见another demo

[^%\s]+部分匹配一个或多个既不是%也不是空格的字符。

请参见Java demo

String line  = "The placeholder is called %Test%! Now you can use it with real placeholders. But if I use more %Test2% placeholders, it won't work anymore :/. %Test3% sucks cause of that!";
Pattern p = Pattern.compile("%([^%\\s]+)%");
Matcher m = p.matcher(line);
List<String> res = new ArrayList<>();
while(m.find()) {
    res.add(m.group(1));
}
System.out.println(res); // => [Test, Test2, Test3]