在python中使用正则表达式来查找字符串

时间:2015-10-13 10:36:46

标签: python regex mediawiki

我正在尝试查找字符串s的子字符串,从{{Infobox开始,以}}结尾。我尝试使用正则表达式执行此操作,但它没有得到任何结果。我认为错误在我的正则表达式中,但由于我已经退出正则表达式,我希望有人可以帮助解决这个问题。字符串s例如:

s = '{{blabla}}{{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| afbeelding=Albert Speer Neurenberg.JPG}}{{blabla}}'

result = re.search('(.*)\{\{Infobox (.*)\}\}(.*)', s)
if result:
    print(result.group(2))

3 个答案:

答案 0 :(得分:4)

您可以使用延迟点匹配,因为您的分隔符不是单符号分隔符,并将您需要的内容捕获到组1中:

import re
p = re.compile(r'\{\{Infobox\s*(.*?)}}')
test_str = "{{blabla}}{{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| afbeelding=Albert Speer Neurenberg.JPG}}{{blabla}}"
match = p.search(test_str)
if match:
    print(match.group(1))

请参阅IDEONE demo

如果您使用否定字符类,则信息框内的任何{}都将阻止匹配整个子字符串。

此外,由于您似乎不需要在您需要的子字符串之前和之后的子字符串,因此您根本不需要匹配(或捕获)它们(因此,我删除了它们)。

答案 1 :(得分:2)

<强>代码:

import re
s = '{{blabla}}{{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| afbeelding=Albert Speer Neurenberg.JPG}}{{blabla}}'

result = re.search(r'(.*){{Infobox ([^}]*?)}}(.*)', s)
if result:
    print(result.group(2))

<强>输出:

persoon Tweede Wereldoorlog| naam=Albert Speer| afbeelding=Albert Speer Neurenberg.JPG

注意:上述正则表达式将匹配,直到它与}之后的第一个{{Infobox相符。

重要提示:

这仅适用于给定样本输入

等情况

如果输入在} 之间有i.e){{blabla}}{{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| }afbeelding=Albert Speer Neurenberg.JPG}}{{blabla}},则无效。对于stribizhev的答案是最佳解决方案

答案 2 :(得分:0)

s = '{{blabla}}{{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| afbeelding=Albert Speer Neurenberg.JPG}}{{blabla}}'

# start with Infobox and two chars before, grab everything but '}', followed by two chars
mo = re.search(r'(..Infobox[^}]*..)',s)


print(mo.group(1))


# {{Infobox persoon Tweede Wereldoorlog| naam=Albert Speer| afbeelding=Albert Speer Neurenberg.JPG}}