Python string matching, error: nothing to repeat at position 0

Python string matching, error: nothing to repeat at position 0

我在 Python astropy table 中有一个名为“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'])

我做错了什么?!

? 在正则表达式中并不意味着 "any character"。将您的 ? 换成 .

如果你不局限于正则表达式或正则表达式之类的,这很简单:

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

这个列表理解将从 data['cc_flags'] 中提取每个元素到一个名为 line 的变量中,return 一个结果列表只包含 line 的最后一个字符是 0。

(显然,如果您需要更具体的 if 语句,您可以在过滤条件中添加您需要的任何其他内容。)

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

例如,试试这个:

import re
regex = r".{3}0"
re.findall(regex,data['cc_flags'])
  • .表示匹配任意字符(行结束符除外)
  • {3}表示正好匹配3次

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

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

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