作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在下面的代码中,我只想获取“-”和“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)
最佳答案
它不包含在内部组中,但仍作为外部组的一部分包含在内。一个非捕获组并不一定意味着它根本没有被捕获……只是那个组没有明确地保存在输出中。它仍然作为任何封闭组的一部分被捕获。
只是不要将它们放入定义捕获的 ()
中:
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/
我是一名优秀的程序员,十分优秀!