gpt4 book ai didi

python - 基于内部结构(如果存在)的 Python 正则表达式

转载 作者:行者123 更新时间:2023-12-01 06:42:47 25 4
gpt4 key购买 nike

我有这样的结构

[[单词测试]] 或 [[单词 | word2 ]] 或 [[word test2 # word]]] ...

我需要提取 # 和 | 之前的所有内容(如果存在),并忽略后面的内容。如果它们不存在,则返回大括号之间的所有内容。

因此上述示例的结果将是:

word test
word
word test2

我有

variable = re.findall(r'\[\[(.*?)\]\]', docs[doc], re.IGNORECASE)

但这并没有提取 #| 之前的内容。

最佳答案

考虑到 [[]] 之间的字符串不包含 [] 并且不包含嵌套括号,你可以使用

re.findall(r'\[\[\s*([^][]*?)\s*(?:[#|][^][]*)?]]', text)

请参阅regex demo .

正则表达式详细信息

  • \[\[ - [[ 子字符串
  • \s* - 0+ 个空格
  • ([^][]*?) - 第 1 组(re.findall 将返回什么):
  • \s* - 0+ 个空格
  • (?:[#|][^][]*)? - 可选组,匹配 1 次或 0 次出现的 #| 后跟除 ][
  • 之外的 0+ 个字符
  • ]] - ]] 子字符串。

如果您需要提取的部分可能包含[],您可以使用

r'\[\[\s*((?:(?!\[\[).)*?)\s*(?:[#|].*?)?]]'

参见this regex demo(?:(?!\[\[).)*? 将匹配任何字符,0 个或更多,但尽可能少,不会启动 [[ 字符序列。 .*? 将匹配除换行符之外的任何零个或多个字符,尽可能少。

关于python - 基于内部结构(如果存在)的 Python 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59372627/

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