Регулярное выражение Python: сохранить первые цифры - PullRequest
0 голосов
/ 23 января 2020

Цель состоит в том, чтобы сохранить первые цифры в строке, но удалить их, если они находятся в другом месте.

Например, следует сохранить только эти цифры:

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 

Как мне избавиться от этого пробела?

Ответы [ 2 ]

3 голосов
/ 23 января 2020

Вы должны иметь возможность просто включить пробел в группу захвата следующим образом:

(?<=\w\b )([ 0-9]*)
            ^ additional space
1 голос
/ 23 января 2020

Чтобы сохранить первые цифры в строке, вы можете также использовать группу захвата с чередованием вместо вида сзади. Соберите в группе то, что вы хотите сохранить, и сопоставьте то, что вы не хотите сохранить.

^([^\S\r\n]*\d+)|\d+[^\S\r\n]*
  • ^ Начало строки
  • ( Захват группа 1 (то, что вы хотите сохранить)
    • [^\S\r\n]*\d+ Соответствует необязательным пробельным символам, кроме символов новой строки, соответствует 1+ цифрам
  • ) Закрыть группа
  • | или
  • \d+[^\S\r\n]* Совпадение с 1 + цифрами, за которыми следуют дополнительные пробельные символы, за исключением символов новой строки (что вы хотите удалить)

Regex demo | 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 
...