2015-09-10 3 views
1

У меня есть это регулярное выражение:Более точный поиск строки в тексте

users_pattern = re.compile(r"\s- [a-zA-Z]+:") 

намерение состоит в том, чтобы смотреть в текст что-то вроде этого:

- Nicolas:    -----> (space)- (one name): 

Но я просто понял, что я могу иметь также в следующих примечаниях в тексте:

- ‪+1 (630) 854-8304‬:  -----> a number 
- :     -----> an emoji 
- Mama Cel:    -----> 2 words 

И мне нужно все это захватить.

Любая идея о том, как я могу исправить свое регулярное выражение, чтобы захватить все это сразу? Должен ли я попытаться сделать это с помощью других регулярных выражений?

ответ

1

Как насчет каких-либо символов, кроме «:»?

r"^\s- [^:]+:" 

Если вы собираетесь соответствовать против многострочного текста, убедитесь, что вы используете re.MULTILINE флаг для ^, чтобы соответствовать на самого начало каждой строки.

Проверить это online


Если вы хотите получить ключевые имена (без «-» и «:»), вы можете использовать capturing group заключая часть матча вы находитесь заинтересованный в получении в parens ( pattern ). Таким образом, re.findall() не вернет весь матч. Вместо этого он вернет то, что соответствовало этой части шаблона.

r"^\s- ([^:]+):" 

Код

# -*- coding: utf-8 -*- 
import re 
p = re.compile(r'^\s- ([^:]+):', re.MULTILINE | re.UNICODE) 
str = u" - Nicolas:    -----> (space)- (one name):\n - ‪+1 (630) 854-8304‬:  -----> a number\n - :     -----> an emoji\n - Mama Cel:    -----> 2 words" 
print re.findall(p, str) 
+0

идеально, я просто удалил «^» и он работал, спасибо людям – NachoMiguel

+0

4 минуты, чтобы пометить его как правильный – NachoMiguel

+0

Может я Боудер вас с мелочью ?, просто быстрый questioin, если я хочу удалить и ':' и '-', возможно ли добавить '^' в оба в регулярном выражении? – NachoMiguel

Смежные вопросы