我有以下一段代码。
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})')
其中 (?: ... )
标志着一个非抓捕组。