繁体   English   中英

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

[英]Regex Python: Keep first digits

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

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

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 

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

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

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

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

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

正则表达式演示| Python 演示

例如

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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM