我在Python astropy表中有一个名为`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'])
我做错了什么?!
答案 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']
应该是字符串,而不是列表。