在python中是否存在一种前进方式来提取与模式匹配的所有项目,特别是2个字符之间的所有项目(例如$$)
我尝试过使用
split("$""$")
在一个看起来像这样的字符串
string = "$This$ $is$ $some$ $data$"
旨在获得看起来像这样的东西
string = [ $This$, $is$, $some$, $data$ ]
然而,这不起作用,是否有一种直接的方式来提取与python中这样的模式相匹配的所有内容?
答案 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$']
答案 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$']