如何处理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})')
其中 (?: ... )
标记一个非捕获组。
我有如下一段代码:
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})')
其中 (?: ... )
标记一个非捕获组。