gpt4 book ai didi

python - 如何在 Python 中使用正则表达式非捕获组格式

转载 作者:太空狗 更新时间:2023-10-30 00:47:26 26 4
gpt4 key购买 nike

在下面的代码中,我只想获取“-”和“u”之间的数字。我以为我可以应用正则表达式非捕获组格式 (?: …)忽略从“-”到第一个数字的所有内容。但输出总是包括它。我如何使用非捕获组格式生成正确的输出?

df = pd.DataFrame(
{'a' : [1,2,3,4],
'b' : ['41u -428u', '31u - 68u', '11u - 58u', '21u - 318u']
})

df['b'].str.extract('((?:-[ ]*)[0-9]*)', expand=True)

enter image description here enter image description here

最佳答案

它不包含在内部组中,但仍作为外部组的一部分包含在内。一个非捕获组并不一定意味着它根本没有被捕获……只是那个组没有明确地保存在输出中。它仍然作为任何封闭组的一部分被捕获。

只是不要将它们放入定义捕获的 () 中:

import pandas as pd

df = pd.DataFrame(
{'a' : [1,2,3,4],
'b' : ['41u -428u', '31u - 68u', '11u - 58u', '21u - 318u']
})

df['b'].str.extract(r'- ?(\d+)u', expand=True)

0
0 428
1 68
2 58
3 318

这样你就可以匹配前面有一个 '-'(mabye 后跟一个空格),后面有一个 'u' 和两者之间的数字的任何东西。

在哪里,

-      # literal hyphen
\s? # optional space—or you could go with \s* if you expect more than one
(\d+) # capture one or more digits
u # literal "u"

关于python - 如何在 Python 中使用正则表达式非捕获组格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50417423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com