我正在尝试使用正则表达式来获取以下内容
输入 -
{foo}
{bar}
\{notgood}
\{bad}
{nice}
\{bad}
输出 -
foo
bar
nice
我想查找以{
开头而不是\{
的所有字符串。
我只有五个单词作为输入。
我尝试了一个正则表达式,即"\\{(foo|bar|nice|notgood|bad)"
,它给出了以{
开头的所有单词。我不知道如何摆脱\{
。我怎么能这样做?
答案 0 :(得分:5)
您可以使用negative lookbehind assertion确保{
只有在\
之前没有匹配时才会匹配:
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile(
"(?<!\\\\) # Assert no preceding backslash\n" +
"\\{ # Match a {\n" +
"(foo|bar|nice|notgood|bad) # Match a keyword\n" +
"\\} # Match a }",
Pattern.COMMENTS);
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group(1));
}
然后 matchList
将包含["foo", "bar", "nice"]
。
答案 1 :(得分:0)
您可以使用'group-match'字符串,如下面的代码所示:
str.replaceAll("(?<!\\\\)\\{(foo|bar|nice|notgood|bad)\\}", "$1");
$1
指的是输入中的第一个()
组
对于str = "{foo} \{bar} {something}"
,它会为您提供foo \{bar} {something}