正则表达式 Python:保留第一个数字



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

例如,应该只保留以下数字:

123456 AB
123456 GENERAL
123456 HOSPITAL

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

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

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

(?<=wb )([0-9]*)

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

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

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

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

(?<=wb )([ 0-9]*)
^ additional space

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

^([^Srn]*d+)|d+[^Srn]*
  • ^字符串开头
  • (捕获组 1(要保留的内容(
    • [^Srn]*d+匹配除换行符以外的可选空格字符,匹配1+数字
  • )关闭组
  • |
  • d+[^Srn]*匹配 1+ 位数字,后跟除换行符以外的可选空格字符(要删除的内容(

正则表达式演示 |蟒蛇演示

例如

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 

最新更新