【问题标题】:Regex: Exclude alphabets and extract numbers alone正则表达式:排除字母并单独提取数字
【发布时间】:2021-04-15 20:05:58
【问题描述】:

我有一个数据框列,其中包含与此类似的数据,

1015 - 1540
56.56 - 156
34.46Sq. Meter 
36Sq. Meter 
1000Sq. Meter

我需要删除字母并使列中的数据如下所示。

1015 - 1540
56.56 - 156
34.46 
36
1000

我尝试了下面的正则表达式模式,但是,它似乎无法正常工作。提前感谢您的帮助。

(\d*\s\-\s\d*)|(\d*[\.]?\d*)(?=\w)

【问题讨论】:

    标签: python-3.x regex pandas regex-lookarounds


    【解决方案1】:

    你可以使用

    df['result'] = df['col'].str.extract(r'(\d+(?:\.\d+)?(?:\s*-\s*\d+(?:\.\d+)?)?)', expand=False)
    

    请参阅regex demo。正则表达式包含一个匹配的捕获组(Series.str.extract 需要至少一个捕获组才能返回值)

    • \d+(?:\.\d+)? - 一个或多个数字,然后是一个点和一个或多个数字的可选序列
    • (?: - 非捕获组的开始:
      • \s*-\s* - 用零个或多个空格括起来的连字符
      • \d+(?:\.\d+)? - 一个或多个数字,然后是一个点和一个或多个数字的可选序列
    • )? - 组结束,匹配 1 次或 0 次(即可选)。

    【讨论】:

      【解决方案2】:

      删除(通过替换为空白)与此正则表达式匹配的所有不需要的字符:

      [^\d .-]|(?<! )-(?! )|(?<=\D)[.]|(?<!-) (?!-)
      

      live demo

      使用re.sub(thisRegex, '', yourStr),即:

      cleaned = re.sub('[^\d .-]|(?<! )-(?! )|(?<=\D)[.]|(?<!-) (?!-)', '', str)
      

      正则表达式是 OR 或这些:

      • [^\d .-] 任何不是数字、空格、点或破折号的字符
      • (?&lt;! )-(?! ) 破折号不在空格旁边
      • (?&lt;=\D)[.] 点前面有一个非数字
      • (?&lt;!-) (?!-) 不在破折号旁边的空格

      如果它被大量使用,请考虑编译一次正则表达式并重用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 2012-12-30
        • 2022-07-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多