我有一些这样的字符串
my {test} value
my { test } value
my { test } value
我需要创建一个正则表达式,使所有内容{}
内都没有空格。
在下一个模式(?<=\{)\s*[a-zA-Z]+\s*(?=})
中,我得到了花括号的内容,但带有空格
如果我像这样\s*
将(?<=\{\s*)[a-zA-Z]+(?=\s*})
设为正向,那么我会看到下一个错误
无法执行正则表达式。 java.util.regex.PatternSyntaxException:后向组在索引8(?<= {\ s *)[a-zA-Z] +(?= \ s *})^ 附近没有明显的最大长度。 >
在没有每个正则表达式匹配的trim()
的情况下是否可以实现这一目标?
答案 0 :(得分:3)
您不需要向前看或向后看。像这样的简单正则表达式就足够了,
\{\s*(.*?)\s*\}
演示, https://regex101.com/r/REDmDT/2(包括更多示例字符串)
就像你说的那样,“我需要创建一个正则表达式,将所有内容放入{}且不带空格”
此正则表达式为您提供居中括号内的所有内容,同时排除左右空间,并按原样保留内部任何空间。
这是演示相同代码的Java代码。
public static void main(String[] args) throws IOException {
List<String> list = Arrays.asList("my {test} value", "my { test } value", "my { test } value",
"my { test hello I am } value", "my { testing 10 times } value");
Pattern p = Pattern.compile("\\{\\s*(.*?)\\s*\\}");
list.forEach(x -> {
Matcher m = p.matcher(x);
if (m.find()) {
System.out.println(x + " --> " + m.group(1));
}
});
}
此输出
my {test} value --> test
my { test } value --> test
my { test } value --> test
my { test hello I am } value --> test hello I am
my { testing 10 times } value --> testing 10 times