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']
应该是字符串,而不是列表。
我在 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']
应该是字符串,而不是列表。