регулярное выражение, чтобы найти все строки между определенными образцами - PullRequest
2 голосов
/ 20 марта 2019

Моя входная строка может быть одной из следующих строк:

Active App: Coffee (priority 34)

Active App: Hot Bread (priority 20)

Active App: Hot Baked Bread (priority 1)

etc...

В этом случае вместо "Coffee" это может быть любая строка [a-zA-Z] (одна илибольше слов).

В "(priority 34)" изменится только целое число.

Так как мне получить "Coffee" / "Hot Bread" / "Hot Baked Bread" из этогоline?

Я не могу правильно обработать пробел между словами.

1 Ответ

2 голосов
/ 20 марта 2019

Вот простое решение с регулярным выражением Python match() для вас:

Не учитывает часть строки после имени приложения, которую вы хотите захватить. Но это может быть добавлено, если это важно.

Он будет захватывать до тех пор, пока не увидит (, а затем позже уберет завершающий пробел из строки.

import re;

myStr = "Active App: Hot Baked Bread (priority 34)";
appStr = re.match("Active App: ([^\(]*)", myStr);
print(appStr.group(1).rstrip());

Вот версия, которая фиксирует только фактическое имя «Active App», без необходимости впоследствии обрезать строку. А также проверяет, найдено ли совпадение перед печатью:

import re;

myStr = "Active App: Coffee Some (priority 34)";
appStringMatch = re.match("Active App: (.*)\s\(", myStr);
if appStringMatch:
    print(appStringMatch.group(1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...