如何迭代所有匹配的组?

时间:2018-02-17 23:31:18

标签: python regex

如果您查看此pythex示例,则可以看到该表达式会为我提供WIKI_LINK的实际文本:

[WIKI_LINK: Whatever@Example]

但是,我不知道如何使用Python的re包获得结果。 search()match()findall()finditer()未向我提供匹配列表。

我的目标是用字符串中的实际显示文本替换所有[WIKI_LINK: ..]表达式。

Text [WIKI_LINK: Whatever@Example] text [WIKI_LINK: Whatever@Example]

将成为

Text Example text Example

只是为了复制& pasteness:

import re

text = 'Text [WIKI_LINK: Example@Whatever] text [WIKI_LINK: Example@Whatever]'

p_wiki_link = re.compile(r'\[WIKI_LINK:.*@(?P<WIKI_LINK>[^\]]+)')

for f in re.finditer(p_wiki_link, text):
    print(f)

1 个答案:

答案 0 :(得分:2)

您可以将re.sub

一起使用
\[WIKI_LINK:[^][]*@([^]]+)]

请参阅regex demo

<强>详情

  • \[WIKI_LINK: - 文字子串[WIKI_LINK:
  • [^][]* - 除[]之外的任何0 +字符
  • @ - @字符
  • ([^]]+) - 第1组(从替换模式引用\1反向引用):]以外的任何1个字符
  • ] - 文字]字符。

请参阅Python demo

import re
text = 'Text [WIKI_LINK: Example@Whatever] text [WIKI_LINK: Example@Whatever]'
p_wiki_link = re.compile(r'\[WIKI_LINK:[^][]*@([^]]+)]')
print(p_wiki_link.sub(r'\1', text))
# => Text Whatever text Whatever