正则表达式字符串匹配python问题

时间:2016-07-05 14:11:37

标签: python regex

我正在尝试学习如何使用正则表达式来过滤字符串,尤其是我试图过滤以下字符串:

  

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)

任何人都可以帮助我吗?

3 个答案:

答案 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)

Regex101 Demo

答案 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中使用它们,直到你掌握它们为止。