如何处理pandas中str.extract中的嵌套括号?

How to cope with nested parenthesis in str.extract in pandas?

我有如下一段代码:

df['hms'].str.extract('([0-9]{2}\_[0-9]{2}\_[0-9]{2}\_)')

其中列中的字符串类似于:“12_31_31_”(实际上是一个时间戳)。上面的代码有效,但是我想做的是将模式 ([0-9]{2}\_[0-9]{2}\_[0-9]{2}\_) 重新定义为 ([0-9]{2}\_){3}。代码将是:

display(df['event_id'].str.extract('([0-9]{2}\_){3}'))

但是匹配会导致 21_ 或类似的东西。

示例代码:

test = pd.Series(['12_41_15_asds', '41_14_11_adfsag'])
test.str.extract('([0-9]{2}\_){3}')

我认为这个模式失败了,因为他们只看内括号,但是如果我需要在所有内容周围添加一个额外的括号,我会得到两列。有办法解决这个问题吗?

您可以使用双括号,但将内部括号设为非捕获:

test.str.extract('((?:\d{2}\_){3})')

其中 (?: ... ) 标记一个非捕获组。