我有一些像这样的字符串
my {test} value
my { test } value
my { test } value
我需要创建一个正则表达式,它将获得{}
中的所有内容,而不包含空格。
在下一个模式(?<=\{)\s*[a-zA-Z]+\s*(?=})
中,我得到了带空格的花括号的内容
如果我像这样将\s*
设置为正向前视,我会看到下一个错误
无法执行正则表达式。java.util.regex.PatternSyntaxException:后视组在索引8 (?<={\s*)a-zA-Z+(?=\s*}) ^附近没有明显的最大长度
有没有可能在没有每个正则表达式匹配的trim()
的情况下实现这一点?
发布于 2018-10-24 03:46:17
你不需要向前看,也不需要向后看。像这样的简单正则表达式就足够了,
\{\s*(.*?)\s*\}
Demo、https://regex101.com/r/REDmDT/2 (包含更多示例字符串)
就像你说的,“我需要创建一个正则表达式,它将把{}中的所有东西都放在没有空格的地方。”
这个正则表达式为您提供了花括号内的所有内容,同时排除了右/left空格,并保留了其中的所有空格。
这里有一段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
https://stackoverflow.com/questions/52956712
复制相似问题