python
  • regex
  • 2012-01-31 7 views 6 likes 
    6

    В следующем примере я хотел бы, чтобы вытащить текст между двойными кавычками ("). Тем не менее, интерпретатор питона не устраивает, и я не могу понять, почему ...Python регулярного выражения текст матча между кавычками

    import re 
    
    text = 'Hello, "find.me-_/\\" please help with python regex' 
    pattern = r'"([A-Za-z0-9_\./\\-]*)"' 
    m = re.match(pattern, text) 
    
    print m.group() 
    

    выход должен быть find.me-/\

    +3

    btw, вы можете упростить шаблон: pattern = r '"([^"] *) "' –

    +0

    ' re.findall (pattern, text) 'также может быть полезно, если вам нужно совместить все цитаты. –

    ответ

    11

    match начинает поиск с начала текста

    Использование search вместо:..

    #!/usr/bin/env python 
    
    import re 
    
    text = 'Hello, "find.me-_/\\" please help with python regex' 
    pattern = r'"([A-Za-z0-9_\./\\-]*)"' 
    m = re.search(pattern, text) 
    
    print m.group() 
    

    match и search возвращение None, когда они не совпадают.

    Я думаю, что вы получаете AttributeError: 'NoneType' object has no attribute 'group' из python: Это потому, что вы предполагаете, что будете соответствовать, не проверяя возврат с re.match.

    +0

    Как я могу проверить, вернули ли они null или нет? –

    +0

    'if m is None': doStuffIfNoMatch() else: doStuffIfMatch()' –

    1

    Использовать re.search() вместо re.match(). Последний будет соответствовать только в начале строк (например, неявный ^).

    1

    Вам нужно re.search(), а не re.match() `, которое привязано к началу вашей входной строки.

    Docs here

    1

    Если вы пишете:

    m = re.search(pattern, text) 
    

    матч: поиск в начале текста

    поиска: поиск все строки

    Может быть, это помогает вы должны понимать: http://docs.python.org/library/re.html#matching-vs-searching

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