2010-09-29 7 views
0

Как извлечь слово «брань» из следующих функций:Регулярные выражения

type=weaksubj len=1 word1=wrestle pos1=verb stemmed1=y priorpolarity=negative 

с помощью регулярного выражения?

Благодаря

+2

Зависит. Вы ищете первое слово после слова «word1 =»? Могут ли они иметь символы верхнего и нижнего регистра? Другие специальные символы? Я нахожу, что как только вы думаете об этих вещах, регулярное выражение почти пишет себя. – Spacedman

ответ

6

вопрос не очень понятно, но я думаю, это то, что вы ищете:

word1=(\w+) 

Ваш матч будет в 1-й группе. Вот некоторые примеры кода Python:

import re 
yourstring = 'type=weaksubj len=1 word1=wrestle pos1=verb stemmed1=y priorpolarity=negative' 

m = re.search(r'word1=(\w+)', yourstring) 
print m.group(1) 

Как видно на codepad. Более обобщенное решение:

import re 
def get_attr(str, attr): 
    m = re.search(attr + r'=(\w+)', str) 
    return None if not m else m.group(1) 

str = 'type=weaksubj len=1 word1=wrestle pos1=verb stemmed1=y priorpolarity=negative' 

print get_attr(str, 'word1') # wrestle 
print get_attr(str, 'type') # weaksubj 
print get_attr(str, 'foo') # None 

Также доступны на codepad

+0

спасибо, что сработал :) – 2010-09-29 16:45:31

+0

Отличный ответ. +1 – Ruel

0

Вы регулярное выражение будет что-то вроде этого

/.*word1=(\w+)/ 
+0

Это также не работает – NullUserException

+0

Если вы отредактируете свой ответ, было бы неплохо прокомментировать его. Некоторое время я был смущен, почему это не сработало. Хотя исходный '. *' По-прежнему бессмыслен. – teukkam

0

Использование: /word1=(\w+)/

+0

Да, спасибо об этом. Ред. Нежелательное сопоставление вызывало регулярное выражение только для одного символа. : P – Ruel

2

Учитывая следующее регулярное выражение ...

/word1=(\w+)/ 

... $ 1 или любой другой ваш первый матч на вашем языке будет бороться.

+0

в python, на что он должен быть похож? спасибо – 2010-09-29 16:25:18

+1

Я верю, что это 'result = re.match (pattern, string)' – Ruel

+0

@James см. мой ответ – NullUserException

0

Предполагая, что она всегда разделены пробелами

word1=([^ ]+) 

Тогда вы можете получить значение на первом матче группы.

0

Может быть повторно ненужно, когда str.split выглядит, как это будет достаточно:

>>> s = "type=weaksubj len=1 word1=wrestle pos1=verb stemmed1=y priorpolarity=negative" 
>>> dd = dict(ss.split('=',1) for ss in s.split()) 
>>> dd['word1'] 
'wrestle' 
Смежные вопросы