【问题标题】:Regex Python: Keep first digits正则表达式 Python:保留第一个数字
【发布时间】:2020-01-23 18:16:02
【问题描述】:

目标是保留字符串中的第一个数字,但如果它们位于不同的位置,则将它们删除。

例如,应该只保留这个数字:

123456 AB
123456 GENERAL
123456 HOSPITAL

另一方面,这些数字应该被删除:

PROJECT 150000 SCHOLARSHIPS
SUMMERLAND 05 100 SCHOOL 100 ABC
ABC HOSPITAL 01 20 30 GENERAL
ABC HOSPITAL 01

我制作了这个正则表达式,它非常接近上述行为并替换了空白:

(?<=\w\b )([0-9]*)

但是,在删除来自前一个空格的数字时,我得到了一些额外的空格:

123456 AB
123456 GENERAL
123456 HOSPITAL

PROJECT  SCHOLARSHIPS
SUMMERLAND   SCHOOL  ABC
ABC HOSPITAL    GENERAL
ABC HOSPITAL 

我怎样才能摆脱这个空间?

【问题讨论】:

  • 试试re.sub(r'(\w)\s+\d+', r'\1', text)r'(\S)\s+\d+'。如果您只需要将数字作为整个单词删除,请在末尾添加\b。如果你想使用lookbehind,你可以使用re.sub(r'(?&lt;=\w)\s+\d+', '', text)
  • ^\s*(\d+)|\d+\s*,而不是后视并替换为第1组r\1regex101.com/r/LOsWMK/1

标签: python regex regex-lookarounds


【解决方案1】:

您应该能够像这样在捕获组中包含空格:

(?<=\w\b )([ 0-9]*)
            ^ additional space

【讨论】:

    【解决方案2】:

    要保留字符串中的第一个数字,您还可以使用带有交替的捕获组,而不是后视。在一个组中捕获您想要保留的内容,并匹配您不想保留的内容。

    ^([^\S\r\n]*\d+)|\d+[^\S\r\n]*
    
    • ^ 字符串开始
    • (捕获group 1(你想保留的)
      • [^\S\r\n]*\d+ 匹配可选的空白字符,换行符除外,匹配 1+ 位
    • )关闭群
    • |或者
    • \d+[^\S\r\n]* 匹配 1+ 个数字,后跟可选的空白字符,换行符除外(您要删除的内容)

    Regex demo | Python demo

    例如

    result = re.sub(regex, r'\1', test_str, 0, re.MULTILINE)
    

    输出

    123456 AB
    123456 GENERAL
    123456 HOSPITAL
    
    PROJECT SCHOLARSHIPS
    SUMMERLAND SCHOOL ABC
    ABC HOSPITAL GENERAL
    ABC HOSPITAL 
    

    【讨论】:

    • 谢谢@第四只鸟,我正在寻找摆脱背后的样子,但不知道如何。非常感谢您展示如何:)
    猜你喜欢
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2017-02-21
    相关资源
    最近更新 更多