首页 > 解决方案 > 如何获取不在模式 grep 中的所有内容

问题描述

我正在尝试获取大括号中未包含的特定字符串。我使用以下模式来匹配大括号内的内容:

\{[A-z0-9]+\}

对于这个字符串:

{hello}cat{world}

匹配helloworld部分。我需要的是相反的,所以cat在这个特定的例子中。它应该适用于任何类型的字符串,即:

{foo} - gives nothing
{foo}bar{aaa} - gives bar
cat - gives cat
dog{cat}fish - gives dog and fish

如果这很重要,我会使用 Python。

标签: pythonregex

解决方案


您可以使用

r'\b(?<!\{)[a-zA-Z0-9]+\b(?!})'

请参阅正则表达式演示详情

  • \b- 单词边界
  • (?<!\{)-{左侧不允许立即
  • [a-zA-Z0-9]+- 一个或多个字母数字 ASCII 字符(用于[^\W_]+匹配任何 Unicode 字母数字字符)
  • \b- 单词边界
  • (?!})-{不允许立即在右侧。

请参阅Python 演示

import re
rx = r"\b(?<!\{)[a-zA-Z0-9]+\b(?!})"
text = "{hello}cat{world}"
print( re.findall(rx, text) )
# => ['cat']

推荐阅读