微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

在下面的代码中,我想得到’ – ‘和’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后跟一个aspace),后面跟’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"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐