необходимо выражение регулярного выражения, чтобы избежать символа "\ n" - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу применить регулярное выражение к приведенной ниже строке в python. Где я хочу захватить только номер модели: 123. Я пробовал приведенное ниже регулярное выражение, но оно не принесло мне результат.

string = """Model Number : 123 
            Serial Number : 456"""
model_number = re.findall(r'(?s)Model Number:.*?\n',string)

ВыводНомер модели: 123 \ n Как можно избежать \ n в конце вывода?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вы можете использовать strip() функцию

model_number.strip()

, это удалит все пробелы

0 голосов
/ 08 февраля 2019

Удалите встроенный модификатор DOTALL (?s), чтобы избежать сопоставления символа новой строки с ., добавьте \s* после Number и используйте .* вместо .*?\n:

r'Model Number\s*:.*'

См. regex demo

Здесь Model Number будет соответствовать литеральной подстроке, \s* будет соответствовать 0+ пробелов, : будет соответствовать двоеточию, а .* будет соответствовать 0или больше символов кроме символов разрыва строки .

Демо Python :

import re
s = """Model Number : 123
            Serial Number : 456"""
model_number = re.findall(r'Model Number\s*:.*',s)
print(model_number) # => ['Model Number : 123']

Если вам нужно извлечь только число, используйте

r'Model Number\s*:\s*(\d+)'

См. еще одну демонстрацию регулярных выражений и эту демонстрацию Python .

Здесь (\d+) захватит 1 или более цифр и re.findallтолько вернуть эти цифры.Или используйте его с re.search, и как только объект данных совпадения будет получен, возьмите его с помощью match.group(1).

ПРИМЕЧАНИЕ : если строка появляется в начале строки, используйтеre.match.Или добавьте ^ в начале шаблона и используйте флаг re.M (или добавьте (?m) в начале шаблона).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...