gpt4 book ai didi

Java 正则表达式 : multiple matches in positive lookahead and lookbehind

转载 作者:行者123 更新时间:2023-11-29 04:15:00 26 4
gpt4 key购买 nike

我有一些这样的字符串

  • my {test} value
  • my { test } value
  • my { test } value

我需要创建一个正则表达式来获取 {} 中的所有内容没有空格。

下一个模式(?<=\{)\s*[a-zA-Z]+\s*(?=})我得到大括号的内容,但有空格

enter image description here

如果我输入 \s*像这样积极向前看(?<=\{\s*)[a-zA-Z]+(?=\s*})我看到下一个错误

Unable to execute regular expression. java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length near index 8 (?<={\s*)[a-zA-Z]+(?=\s*}) ^

没有 trim() 是否有可能实现这一点?每个正则表达式匹配?

最佳答案

你不需要向前看或向后看。像这样简单的正则表达式就足够了,

\{\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

关于Java 正则表达式 : multiple matches in positive lookahead and lookbehind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52956712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com