Python字符串匹配,错误:在位置0没有重复

时间:2018-03-08 15:23:37

标签: python regex string matching

我在Python astropy表中有一个名为`cc_flags'的列。它看起来像::

cc_flags

0000
ddOO
0000
hHOO
0000
DD00
hHOO
hHPO
P000
00h0
...
0000

如果它是'0',我想用四个最后一个字符拉出每一行,即'*** 0'或'??? 0'匹配器。

我正在接受

error: nothing to repeat at position 0

import re
regex = r"???0"
re.findall(regex,data['cc_flags'])

我做错了什么?!

4 个答案:

答案 0 :(得分:3)

?并不代表"任何角色"在正则表达式。将?换成. s

答案 1 :(得分:2)

如果您不仅限于正则表达式或正则表达式,这很简单:

has_zeros = [line for line in data['cc_flags'] if line[-1] == '0']

此列表理解将从data['cc_flags']中提取出每个元素到一个名为line的变量中,并返回一个结果列表,该列表仅包含行的最后一个字符为0。

(显然,如果你需要更具体的if语句,你可以在过滤条件中添加你需要的任何东西。)

答案 2 :(得分:1)

正如其他人所说,您需要使用.代替?。另一种方法是使用{}来指定匹配的数量。

例如,试试这个:

import re
regex = r".{3}0"
re.findall(regex,data['cc_flags'])
  • .表示匹配任何字符(行终止符除外)
  • {3}表示完全匹配3次

答案 3 :(得分:0)

问题在于正则表达式不能在搜索词中转义特殊字符。要使其正常工作,只需将您的声明更改为以下内容:

import re
regex = re.escape("???0")
re.findall(regex,data['cc_flags'])

data['cc_flags']应该是字符串,而不是列表。