Соответствующие индексы через регулярное выражение в Python (3.6) [duplicate]

3
задан kramer65 2 May 2013 в 23:57
поделиться

3 ответа

@ExplosionPills верна, но с вашим регулярным выражением все еще будет две проблемы.

Во-первых, $ соответствует концу строки. Я предполагаю, что вы захотите также извлечь int в середине строки, , например abcd123456efg789, чтобы вернуть 123456. Чтобы исправить это, вы хотите это:

r"[0-9]{4,7}(?![0-9])"
            ^^^^^^^^^

Добавленная часть представляет собой отрицательное утверждение look / head , означающее «... не сопровождаемое никакими номерами». Позвольте мне упростить это, используя \d, хотя:

r"\d{4,7}(?!\d)"

. Это лучше. Теперь вторая проблема. У вас нет ограничений на левую часть вашего регулярного выражения, поэтому для строки, подобной abcd123efg123456789, вы действительно сопоставляете 3456789. Итак, вам нужно отрицательное утверждение lookbehind :

r"(?<!\d)\d{4,7}(?!\d)"
10
ответ дан Andrew Cheong 25 August 2018 в 18:54
поделиться

.match будет соответствовать только если строка запускает с рисунком. Используйте .search.

8
ответ дан Explosion Pills 25 August 2018 в 18:54
поделиться

Вы также можете использовать:

re.findall(r"[0-9]{4,7}", teststring)

, который вернет список всех подстрок, соответствующих вашему регулярному выражению, в вашем случае ['123456']

Если вы интересуется только первой подобранной подстрокой, тогда вы можете записать это как:

next(iter(re.findall(r"[0-9]{4,7}", teststring)), None)
2
ответ дан galarant 25 August 2018 в 18:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: