pandas STR extract使用regex从字符串中选择所有字母,只返回第一个匹配- STR extract或r



在Pandas中,我有一个名为TermNew的数据框架列,其中包含以下小写字符串(请忽略项目符号-我在格式化时遇到问题)

TermNew

  • 999 years from 1/01/2001

  • 999年(少于20天)从20/11/2000

  • 99 years from 1/10/1979

  • 999 years from 1/01/1992

我试图提取所有字母字符(只有a-z,没有数字,没有空格,没有()或/)从TermNew到一个新的列Termtext与这些预期的结果

Termtext

  • yearslessdaysfrom
  • 距距

    我尝试了以下操作,但它只返回到第一个空白处的字母,即

    leaseterm1 [' Termtext '] = leaseterm1 [' TermNew '] .str.extract (r" ([a - z] +)")

    <输出/strong>

    在regex101中,我可以使用全局标志来正确匹配所有字母。

    1/这是str提取只找到第一个匹配还是的问题

    2/这是一个正则表达式问题-我没有包括任何形式的全局搜索过去的第一个空白?

    感谢收到任何建议。由于

    您可以使用str.extractall(),聚合多个匹配的结果,如下所示:

    leaseterm1['Termtext'] = leaseterm1['TermNew'].str.extractall(r"([a-z]+)").groupby(level=0).agg(''.join)
    

    或使用GroupBy.sum进行聚合:

    leaseterm1['Termtext'] = leaseterm1['TermNew'].str.extractall(r"([a-z]+)").groupby(level=0).sum(numeric_only=False)
    

    结果:

    print(leaseterm1)
    TermNew           Termtext
    0                  999 years from 1/01/2001          yearsfrom
    1  999 years (less 20 days) from 20/11/2000  yearslessdaysfrom
    2                   99 years from 1/10/1979          yearsfrom
    3                  999 years from 1/01/1992          yearsfrom
    

    关于你的问题:

    str.extract()的官方文档

    可以看到

    对于系列中的每个主题字符串,从第一个主题字符串中提取组匹配正则表达式pat.

    str.extract()只提取第一个匹配项。

    如果你想提取多个匹配,你应该使用str.extractall()代替。

    Forstr.extractall():

    对于系列中的每个主题字符串,从所有匹配中提取组正则表达式pat.

    替换除a-z以外的所有字符更容易

    leaseterm1['Termtext'] = leaseterm1['TermNew'].str.replace(r"[^a-z]+", "")
    

    输出
    TermNew           Termtext
    0                  999 years from 1/01/2001          yearsfrom
    1  999 years (less 20 days) from 20/11/2000  yearslessdaysfrom
    2                   99 years from 1/10/1979          yearsfrom
    3                  999 years from 1/01/1992          yearsfrom
    

    最新更新