Python:提取与模式匹配的所有项目

时间:2014-03-20 16:46:01

标签: python string split

在python中是否存在一种前进方式来提取与模式匹配的所有项目,特别是2个字符之间的所有项目(例如$$)

我尝试过使用

split("$""$")

在一个看起来像这样的字符串

string = "$This$ $is$ $some$ $data$"

旨在获得看起来像这样的东西

string = [ $This$, $is$, $some$, $data$ ]
然而,这不起作用,是否有一种直接的方式来提取与python中这样的模式相匹配的所有内容?

4 个答案:

答案 0 :(得分:1)

以下代码怎么样?

>>> import re
>>> s = "$This$ $is$ $some$ $data$"
>>> re.findall(r'\$[^$]*\$', s)
['$This$', '$is$', '$some$', '$data$']

答案 1 :(得分:1)

re.findall lazy 匹配使用

In [76]: re.findall(r'\$.*?\$', s)  #note the "?" here
Out[76]: ['$This$', '$is$', '$some$', '$data$']

请参阅non-greedy qualifiers

答案 2 :(得分:1)

如前所述,您需要使用re.findall与懒惰匹配。如果没有延迟匹配运算符,第一个$和最后一个$将匹配,您将获得整个字符串。

没有懒人匹配

In [37]: pattern = "$This$ $is$ $some$ $data$"

In [38]: regex = r'\$.*\$'

In [39]: print re.findall(regex, string)
['$This$ $is$ $some$ $data$']

使用延迟匹配

In [40]: pattern = "$This$ $is$ $some$ $data$"

In [41]: pattern = "$This$ $is$ $some$ $data$"

In [42]: regex = r'\$.*?\$'

In [43]: print re.findall(regex, string)
['$This$', '$is$', '$some$', '$data$']

但是在这个问题中,你提到了两个字符之间的所有项目。您可能想要使用以下内容:

In [44]: pattern = "$This$ $is$ $some$ $data$"

In [45]: regex = r'\$(.*?)\$'

In [46]: print re.findall(regex, string)
['This', 'is', 'some', 'data']

答案 3 :(得分:0)

你误解了str.split。它将分隔符作为参数 - 它不会获得满足特定条件的字符串,例如使用某些字符。当你说你想要获得所有用某些字符组成的字符串时,我就有了正则表达式'在我耳边尖叫。

>>> import re
>>> string = "$This$ $is$ $some$ $data$"
>>> re.findall(r'\$[^$]*\$', string)
['$This$', '$is$', '$some$', '$data$']