目标是将第一个数字保留在字符串中,但如果它们位于不同位置,请将其删除。
例如,应该只保留以下数字:
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