Regex Python:保留第一位数字

问题描述 投票:0回答:2

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

例如,仅保留此数字:

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 

如何摆脱这个空间?

python regex regex-lookarounds
2个回答
3
投票

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

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

0
投票

要在字符串中保留前几位,您还可以使用一个具有替代名称的捕获组,而不是使用后向捕获。分组捕获您想要保留的内容,并匹配您不想保留的内容。

^([^\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 
© www.soinside.com 2019 - 2024. All rights reserved.