我正在尝试学习如何使用正则表达式来过滤字符串,尤其是我试图过滤以下字符串:
some text \ n {{Information \ n | region = [[Western]] \ n | image = image187a.jpg {{!}} \ n | .... \ n}} \ n一些文字
我想要做的只是提取" {{信息" 和"}}&#之间包含的字符串部分34; ,两个分隔符标签之间也可能出现其他结束的大括号。 我编写了下面的python代码,但它根本不起作用。
print re.split(r'^\{\{(Information) \}\}$', information.string, flags=re.MULTILINE)
任何人都可以帮助我吗?
答案 0 :(得分:0)
这为您提供了信息"标记":
中的文字import re
text = "some text \n {{Information \n | region = [[Western]] \n | .... \n }} \n some text"
result = re.search(r'{{Information (.*)}}', text, flags=re.DOTALL)
print(result.groups()[0]
答案 1 :(得分:0)
您需要在分隔符之间使用延迟量词,以便它可以匹配跨越多行的其他字符。添加多行模式是为了使^
和$
匹配同一行的开头和结尾。删除它。一个有用的模式虽然是点全部。
re.search('{{Information .*?}}', information.string, flags=re.DOTALL)
答案 2 :(得分:0)
我更喜欢将re.search()用于re.split(),因为您正在尝试搜索模式。您可以尝试这样的事情:
import re
some_text = 'some text \n {{Information \n | region = [[Western]] \n | .... \n }} \n some text'
rx_match = re.search(r'{{Information(?P<info>.*?)}}', some_text, re.DOTALL)
if rx_match is not None:
print rx_match.group('info')
(?P<name>...)
有点先进。它是一个命名组,它允许您按名称选择信息。更简单的方法是:
rx_match = re.search(r'{{Information(.*?)}}', some_text, re.DOTALL)
if rx_match is not None:
print rx_match.group(1)
对于正则表达式,{
不需要转义。 [^}]+
是一个负字符集。 (^
反转要匹配的字符)。它表示匹配一个或多个不是}
s。
然后您需要确认匹配是否成功。如果是,那么您可以使用.group()
方法提取()
组的数据。
根据我的观点,Python可能不是学习正则表达式的最佳语言,但它确实可以处理它。最好在其他地方学习和测试你的正则表达式,然后在Python中使用它们,直到你掌握它们为止。