我正在尝试查找字符串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))
答案 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}}