在这种情况下,我应该使用非贪婪的匹配

时间:2013-06-20 23:02:03

标签: python

假设我有一个字符串,其中包含一些由“|”分隔的数据字段,如 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |

我的目的是获得第8场。这就是我正在做的事情:

pattern = re.compile(r'^\s+(\|.*?\|){8}')
match = pattern.match(test_line)
if match:
   print:match.group(8)

但看起来无法比拟。我知道在这种情况下我需要使用?对于非贪婪的比赛,但为什么我不能得到第8场?

由于

1 个答案:

答案 0 :(得分:5)

正则表达式可能会使这个问题复杂化而不是简化它。从|获取第八项的简单方法分隔字符串使用split()

a = '|here|is|some|data|separated|by|bars|hooray!|'

print a.split('|')[8]

RETURNS

hooray!

使用正则表达式,获得它的一种方法是:

import re
a = '|here|is|some|data|separated|by|bars|hooray!|'

pattern = re.compile(r'([^\|]+)')
match = pattern.findall(a)
print match[7]

RETURNS

hooray!