繁体   English   中英

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

[英]How to use regex non-capturing groups format in 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)

在此输入图像描述 在此输入图像描述

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

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

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"

我认为你正在尝试太复杂的正则表达式。 关于什么:

df['b'].str.extract(r'-(.*)u', expand=True)

      0
0   428
1    68
2    58
3   318

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM